2010-10-13 4 views
1

Я начал писать код для библиотеки, в которой я нуждаюсь. Следующий код дает мне ошибкуC++ qualifier error

class node { 
public: 
    node() { } 
    node(const node&); 
    ~node() { } 

    luint getID() { return this->ID; } 
    node& operator=(const node&); 
protected: 
    luint ID; 
    std::vector<node*> neighbors; 
}; 
node::node(const node& inNode) { 
    *this = inNode; 
} 

node& node::operator=(const node& inNode) { 
    ID = inNode.getID(); 
} 

, которая заключается в следующем:

graph.cpp: In member function 'node& node::operator=(const node&)': graph.cpp:16: error: passing 'const node' as 'this' argument of 'luint node::getID()' discards qualifiers

Я сделал ничего плохого с кодом?

Спасибо,

+0

Следующие две ссылки могут быть interessting для вас: http://en.wikipedia.org/wiki/Const-correctness и http://www.parashift.com/c++-faq -lite/const-correctness.html – Vinzenz

ответ

1

В вашем операторе = функция inNode является постоянной. Функция getID не является постоянной, поэтому ее вызов отбрасывает константу inNode. Просто сделайте GetId Const:

luint getID() const { return this->ID; } 
3

Ваш inNode объявляется const, что означает, что вы можете вызывать только const функции-члены на нем. Вы должны добавить модификатор const в getID, чтобы сообщить компилятору, что он не будет изменять объект:

luint getID() const { return this->ID; } 
+0

+1 бить меня на 5 секунд :-) –

+0

+1 Сегодня я набираю слишком медленно :). – JoshD

0

Вам нужно сделать GetId() Уст.

Смежные вопросы