我有一個非常愚蠢的問題(我認爲)。很長一段時間沒有用C++編碼,但我無法弄清楚這個問題。 我有這個類:C++從'const type * const'無效轉換爲'type *'
#include <QList>
class Node {
private:
QList<Node*> _adjacent;
public:
Node();
bool isConnectedTo(Node* n) const;
};
這個實施isConnectedTo()
:
bool Node::isConnectedTo(Node* n) const{
return _adjacent.contains(n) && n->_adjacent.contains(this);
}
,我得到的return
線以下錯誤:
Node.cpp: In member function ‘const bool Node::isConnectedTo(Node*) const’:
Node.cpp:25:60: error: invalid conversion from ‘const Node* const’ to ‘Node*’ [-fpermissive]
In file included from /usr/include/qt5/QtCore/QList:1:0,
from Node.hpp:5,
from Node.cpp:1:
/usr/include/qt5/QtCore/qlist.h:913:27: error: initializing argument 1 of ‘bool QList<T>::contains(const T&) const [with T = Node*]’ [-fpermissive]
我認爲,由於方法是恆定的,那麼this
的類型爲const Node* const
。 通過閱讀Qt文檔,我看到QList::contains
的類型爲bool QList::contains(const T & value) const
所以它應該沒問題吧?我的意思是,它需要一個const Node*
和const Node* const
就是一個特例,所以...... 通過消除const
在siganture結束,它編譯...
謝謝!
你傳遞它需要一個參考指針。 – OMGtechy
@OMGtechy,對指針的引用。 – chris
'const T&'當'T'是'Node *'時表示'Node * const&',而不是'const Node *&'。 – chris