Tôi có một câu hỏi rất ngớ ngẩn (tôi nghĩ). Nó đã được thời gian dài không mã hóa trong C + +, nhưng tôi không thể tìm ra vấn đề này. Tôi có lớp này:C++ chuyển đổi không hợp lệ từ ‘const type * const’ thành ‘type *’
#include <QList>
class Node {
private:
QList<Node*> _adjacent;
public:
Node();
bool isConnectedTo(Node* n) const;
};
và thực hiện điều này cho isConnectedTo()
:
bool Node::isConnectedTo(Node* n) const{
return _adjacent.contains(n) && n->_adjacent.contains(this);
}
và tôi nhận được lỗi sau trong dòng 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]
Tôi nghĩ rằng, kể từ khi phương pháp là không đổi, sau đó this
là loại const Node* const
tại đây. Bằng cách đọc tài liệu Qt, tôi thấy rằng QList::contains
có loại bool QList::contains(const T & value) const
vì vậy nó phải là ok, phải không? Ý tôi là, phải mất một const Node*
, và một const Node* const
là một trường hợp đặc biệt về điều đó, vì vậy ... Bằng cách loại bỏ các const
vào cuối của siganture, nó biên dịch ...
Cảm ơn!
Bạn đang chuyển một con trỏ ở nơi nó mong muốn tham chiếu. – OMGtechy
@OMGtechy, Tham chiếu đến con trỏ. – chris
'const T &' khi 'T' là' Node * 'có nghĩa là' Node * const & ', không phải' const Node * & '. – chris