ошибка квалификатора С++

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

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: в функции-члене 'node& node::operator=(const node&)': graph.cpp:16: ошибка: передача 'const node' в качестве 'этого' аргумента 'luint node::getID()' отбрасывает квалификаторы

Я сделал что-то не так с кодом?

Спасибо,


person Bob    schedule 13.10.2010    source источник
comment
Следующие две ссылки могут быть вам интересны: en.wikipedia.org/wiki/Const-correctness и parashift.com/c++-faq-lite/const- правильность.html   -  person Vinzenz    schedule 13.10.2010


Ответы (3)


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

luint getID() const { return this->ID; }
person JoshD    schedule 13.10.2010

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

luint getID() const { return this->ID; }
person casablanca    schedule 13.10.2010

Вам нужно сделать getID() константным.

person Johan Kotlinski    schedule 13.10.2010