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

时间:2010-04-23 18:40:08

标签: c++ const

我正在努力解决这个问题。

宣布:

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)

任何帮助非常感谢, 伯特

3 个答案:

答案 0 :(得分:8)

因为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

答案 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)