我正在努力解决这个问题。
宣布:
BYTE *pImage = NULL;
用于通话:
m_pMyInterface->GetImage(i, &imageSize, &pImage);
Visual C ++ 2003编译器错误:
错误C2664:'CJrvdInterface :: GetImage':无法将参数3从'BYTE ** __ w64'转换为'BYTE **& “ 不是'const'的引用不能绑定到非左值
调用的方法定义为:
void CMyInterface::GetImage(const int &a_iTileId, ULONG *a_pulImageSize,
BYTE** &a_ppbImage)
任何帮助非常感谢, 伯特
答案 0 :(得分:8)
因为GetImage可以修改它的第三个参数,所以你需要给它修改一些东西:
BYTE **ppImage = &pImage;
m_pMyInterface->GetImage(i, &imageSize, ppImage);
在您的函数返回后,&pImage
和ppImage
可能不再相同(这也意味着pImage
和*ppImage
可能不同) 。如果你添加这个:
if (ppImage)
pImage = *ppImage;
电话结束后,你应该很好。
如果CMyInterface::GetImage
是您自己的功能,根据您的操作,您可以更改它。在你的功能中,你做过:
a_ppbImage = ...;
或者你只写:
*a_ppbImage = ...;
如果您只执行后者而不是前者,则将引用传递给双指针是过度的。您可以将引用传递给单个指针(BYTE *&image
),也可以传递双指针(BYTE **image
)
答案 1 :(得分:0)
如果你试图修改方法'GetImage()'中的变量'pImage',你应该传递一个指针或对它的引用(不是两者都做)。
你可能想要的是:
BYTE *pImage = NULL;
x.GetImage(iTileId, pulImageSize, a_pImage );
将方法定义为:
void CMyInterface::GetImage(int const& a_iTileId, ULONG* a_pulImageSize, BYTE*& a_ppbImage)
{
}
PS。在你放置你的&和*在类型声明中。
ULONG *a_pulImageSize // Star on the right
BYTE** &a_ppbImage // Star on the left (not consistent)
个人(这只是我的风格,其他人不同)我把所有东西放在左边(带有类型),只是变量名称在右边。
答案 2 :(得分:0)
您声明GetImage()期望引用字节**。
void CMyInterface::GetImage(const int &a_iTileId,
ULONG *a_pulImageSize,
BYTE** &a_ppbImage);
你传给了一个Byte *的引用。
BYTE *pImage = NULL;
m_pMyInterface->GetImage(i, &imageSize, &pImage);
要使方法调用按编写方式工作,您需要将GetImage()的定义更改为
void CMyInterface::GetImage(const int &a_iTileId, ULONG *a_pulImageSize,
BYTE* &a_ppbImage)