我是一名C#开发人员,学习/学习/熟悉C ++
我正在数据库访问中,我有以下代码,在这种情况下我无法理解&所做的事情。
SQLHENV hEnv = NULL;
if (SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv) == SQL_ERROR)
{
如果我删除&,则会出现此错误。
'SQLAllocHandle' : cannot convert parameter 3 from 'SQLHENV' to 'SQLHANDLE *'
起初,我认为它只是将该字段作为参考传递,但是基于错误,它读起来更像是如何允许它转换的?
最佳答案
在当前示例的上下文中,&
运算符用于获取变量的地址。
从错误消息中,看起来SQLAllocHandle
希望参数3的类型为SQLHANDLE *
(指向SQLHANDLE
的指针)。
当“删除” &
时,您将SQLHENV
传递给它,该&
无法转换为所需的类型。但是当您“包含” SQLHANDLE
时,它起作用了,因为我猜测typedef
被SQLHENV
转换为SQLHENV*
,或者由于继承或其他原因,SQLHANDLE*
可转换为SQLAllocHandle
。
我需要做猜测,因为问题中没有提到SQLHENV
的签名以及SQLHANDLE
和的类关系。