繁体   English   中英

不是'const'的引用不能绑定到非左值

[英]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);

在函数返回后, &pImageppImage可能不再相同(这也意味着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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM