如何解决编译错误“无法将 const 转换为引用”在 VC++9
我正在从事从 VC6 到 VC9 的迁移项目。在 VC9 (Visual Studio 2008) 中,我在将 const 成员传递给接受引用的方法时遇到编译错误。在 VC6 中编译没有错误。
示例程序:
class A
{
};
typedef CList<A, A&> CAlist;
class B
{
CAlist m_Alist;
public:
const B& operator=( const B& Src);
};
const B& B::operator=( const B& Src)
{
POSITION pos = Src.m_Alist.GetHeadPosition();
while( pos != NULL)
{
**m_Alist.AddTail( Src.m_Alist.GetNext(pos) );**
}
return *this;
}
错误: 编译上面的程序时,出现错误:
错误 C2664:“POSITION CList::AddTail(ARG_TYPE)”:无法将参数 1 从“const A”转换为“A &”
请帮我解决这个错误。
I am working in migration project from VC6 to VC9. In VC9 (Visual Studio 2008), I got compilation error while passing const member to a method which is accepting reference. It is getting compiled without error in VC6.
Sample Program:
class A
{
};
typedef CList<A, A&> CAlist;
class B
{
CAlist m_Alist;
public:
const B& operator=( const B& Src);
};
const B& B::operator=( const B& Src)
{
POSITION pos = Src.m_Alist.GetHeadPosition();
while( pos != NULL)
{
**m_Alist.AddTail( Src.m_Alist.GetNext(pos) );**
}
return *this;
}
Error:
Whiling compiling above program, I got error as
error C2664: 'POSITION CList::AddTail(ARG_TYPE)' : cannot convert parameter 1 from 'const A' to 'A &'
Please help me to resolve this error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为
GetNext()
方法返回类A
的临时对象,而函数AddTail
接受参数A&
代码>.由于临时对象无法绑定到非常量引用,因此会出现错误。解决这个问题最简单的方法是将其分成两个语句。例如:That is because the
GetNext()
method returns a temoprary object of classA
and the functionAddTail
takes the parameterA&
. Since a temporary object can not be bound to a non-const reference you get the error. The simplest way to solve it is to break it into two statements. For example: