問題描述:QT中自己編寫了一個結構體變量CBaowen,報文中含有函數重載部分(如下所示),
之後定義一個隊列變量 QQueue<CBaowen> queue;
當給隊列變量賦值時queue.enqueue(baowen)時,
會出現cannot bind non-const lvalue reference of type ‘CBaowen&’ to an rvalue of type ‘CBaowen錯誤
CBaoWen& operator=(CBaoWen &OtherBaoWen) //賦值運算符重載
{
}
CBaoWen(CBaoWen &OtherBaoWen) //拷貝構造函數
{
}
問題原因:
這個錯誤是C++編譯器的一個關於語義的限制。(重載函數中)
如果一個參數是以非const引用傳入,c++編譯器就有理由認爲程序員會在函數中修改這個值,並且這個被修改的引用在函數返回後要發揮作用。但如果你把一個臨時變量當作非const引用參數傳進來,由於臨時變量的特殊性,程序員並不能操作臨時變量,而且臨時變量隨時可能被釋放掉,所以,一般說來,修改一個臨時變量是毫無意義的,據此,c++編譯器加入了臨時變量不能作爲非const引用的這個語義限制。
解決辦法:
只需給=重載參數加上const常量限制符。
CBaoWen& operator=(const CBaoWen &OtherBaoWen) //賦值運算符重載
{
}
CBaoWen(const CBaoWen &OtherBaoWen) //拷貝構造函數
{
}