![](/img/trans.png)
[英]MFC error like A reference that is not to 'const' cannot be bound to a non-lvalue
[英]A reference that is not to 'const' cannot be bound to a non-lvalue
我有点挣扎。
宣布:
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)
任何帮助非常感谢,伯特
因为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
)
如果你试图修改方法'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)
个人(这只是我的风格,其他人是不同的)我把所有东西放在左边(带有类型)只是变量名称在右边。
您声明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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.