Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有点复杂的C2102:'&';需要l值错误 我试图在VisualStudio 2017上编译一个旧的C++代码(EUDORA邮件),我得到大约400个C2102错误。_C++_Visual Studio 2017_Lvalue - Fatal编程技术网

有点复杂的C2102:'&';需要l值错误 我试图在VisualStudio 2017上编译一个旧的C++代码(EUDORA邮件),我得到大约400个C2102错误。

有点复杂的C2102:'&';需要l值错误 我试图在VisualStudio 2017上编译一个旧的C++代码(EUDORA邮件),我得到大约400个C2102错误。,c++,visual-studio-2017,lvalue,C++,Visual Studio 2017,Lvalue,代码在所有情况下都非常相似: const CSummary *& GetPrev(POSITION& rPosition) const { return reinterpret_cast<const CSummary *&>( m_ObList.GetPrev(rPosition) ); } // Error C2102 有人能帮我找到一个简单的方法来解决这些问题吗 先谢谢

代码在所有情况下都非常相似:

        const CSummary *&       GetPrev(POSITION& rPosition) const
                            { return reinterpret_cast<const CSummary *&>( m_ObList.GetPrev(rPosition) ); }  // Error C2102
有人能帮我找到一个简单的方法来解决这些问题吗

先谢谢你

罗纳德

来自文件:

运算符(&)的地址必须有一个l值作为操作数

出现错误的原因是您获得了临时地址:

m_ObList.GetPrev(rPosition)
它是
const-CObject*
类型的非常量指针

不能将非常量左值引用绑定到临时

如果要返回指针,可以删除&:

 CSummary* GetPrev(POSITION& rPosition) const
 { return static_cast<const CSummary *>( m_ObList.GetPrev(rPosition) ); }
CSummary*GetPrev(位置和位置)常量
{return static_cast(m_ObList.GetPrev(rPosition));}
我改变了:

const CSummary*& GetHead() const
                            { return reinterpret_cast<const CSummary *&>( m_ObList.GetHead() ); }

所以我没有编译器错误,但我不确定它是否应该是

是的,你是对的。我需要找到一个简单的方法来解决它(通过一个tmp变量?),因为我必须复制它400多次…:-(已更新我的答案。更改完成,但现在我遇到C2440错误:无法从'const CSummary*'转换为'const CSummary*&'似乎您正在将指针转换为引用。但是,我无法根据现有信息判断问题。如果您能提供一个最小的示例,它将有助于解决问题。此外,您可以参考微软文档关于。
const CSummary*& GetHead() const
                            { return reinterpret_cast<const CSummary *&>( m_ObList.GetHead() ); }
const CSummary*& GetHead() const
{
    const CObject* tmp;
    tmp = m_ObList.GetHead();
    return reinterpret_cast<const CSummary *&>(tmp);} 
    _AFXCOLL_INLINE const CObject* CObList::GetHead() const
{ ASSERT(m_pNodeHead != NULL);
    return m_pNodeHead->data; }