我是一名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时,它起作用了,因为我猜测typedefSQLHENV转换为SQLHENV*,或者由于继承或其他原因,SQLHANDLE*可转换为SQLAllocHandle

我需要做猜测,因为问题中没有提到SQLHENV的签名以及SQLHANDLE和的类关系。

08-17 05:47