[英]How to resolve compilation error “cannot convert const to reference” in 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&'
請幫助我解決此錯誤。
這是因為GetNext()
方法返回類A
的臨時對象,並且函數AddTail
接受參數A&
。 由於無法將臨時對象綁定到非常量引用,因此會出現錯誤。 解決它的最簡單方法是將其分為兩個語句。 例如:
while( pos != NULL)
{
A a = Src.m_Alist.GetNext(pos);
m_Alist.AddTail(a);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.