2010-10-13 45 views
1

我已經開始爲我需要的庫編寫一些代碼。下面的代碼給我一個錯誤C++限定符錯誤

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 2010-10-13 19:51:25

回答

1

在您的operator =函數中,inNode是常量。函數getID不是常量,因此調用它將放棄inNode的常量。只要讓getID常量:

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

inNode被宣佈爲const,這意味着你只可以調用它const成員函數。你必須在const改性劑添加到getID告訴它不會修改對象編譯:

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

+1打我5秒:-) – 2010-10-13 19:51:34

+0

+1我今天打字太慢:)。 – JoshD 2010-10-13 19:52:24

0

你需要做的getID()const的。