我有一个非常愚蠢的问题(我认为)。很长一段时间没有用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