有点复杂的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; }