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

Ber*_*ert 3 c++ const

我有点挣扎.

宣布:

BYTE *pImage = NULL;
Run Code Online (Sandbox Code Playgroud)

用于通话:

m_pMyInterface->GetImage(i, &imageSize, &pImage);
Run Code Online (Sandbox Code Playgroud)

Visual C++ 2003编译器错误:

错误C2664:"CJrvdInterface ::的getImage":无法从"BYTE**__ W64"转换参数3"BYTE**"的引用不是为"const的"不能被结合到非左值

调用的方法定义为:

void CMyInterface::GetImage(const int &a_iTileId, ULONG *a_pulImageSize, 
                            BYTE** &a_ppbImage)
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢,伯特

R S*_*hko 8

因为GetImage可以修改它的第三个参数,所以你需要给它修改一些东西:

BYTE **ppImage = &pImage;
m_pMyInterface->GetImage(i, &imageSize, ppImage);
Run Code Online (Sandbox Code Playgroud)

这可能是你的函数返回后,即&pImageppImage可能不再是相同的(这也意味着,pImage*ppImage可能会有所不同).如果你添加这个:

if (ppImage)
    pImage = *ppImage;
Run Code Online (Sandbox Code Playgroud)

通话结束后,你应该好.

如果CMyInterface::GetImage你自己的功能,取决于你做什么,你可能能够改变它.在你的功能中,你做过:

a_ppbImage = ...;
Run Code Online (Sandbox Code Playgroud)

或者你只写:

*a_ppbImage = ...;
Run Code Online (Sandbox Code Playgroud)

如果您只执行后者而不是前者,则将引用传递给双指针是过度的.您可以将引用传递给单个指针(BYTE *&image),也可以传递双指针(BYTE **image)