2014-02-12 35 views
1

我有這樣定義的Node類(這是最低版本):不能讓我的常量性右

class Node { 
    private: 
     std::vector <const Node*> leaves; 

    public: 
     Node* getLeaf(int i); 
} 

換句話說,我想getLeaf的指針返回向量的元素「葉子」

我試圖定義getLeaf像這樣

Node* Node::getLeaf(int i){ 
    return leaves[i]; 
} 

好了,我知道我擰常量性的。我試過函數聲明/定義中const修飾符的變體,但沒有運氣。有人請幫忙:)

+0

檢查你的返回類型爲const。 – Carl

+1

你要麼返回'const Node *',要麼在向量中保存非常量'Node *'。正如你所說的,將一個非const指針返回給一個const對象會導致constness,(除非你遇到了一些不好的事情,而且可能是'const_cast'的錯誤行爲)。 –

+0

你只需要設置返回類型爲:'const Node * Node :: getLeaf(int i)' – SHR

回答

0

const是一個承諾不會改變。

您聲明瞭一個指向const節點的指針向量。這是承諾不會通過這些指針更改任何Node

getLeaf函數不能很好地返回指向非const節點的指針,因爲那麼調用者可以對該節點執行任何操作。

所以你必須在兩個地方做出相同的承諾,否則不作任何承諾。


另一個問題是本身是否getLeaf應該const(它可能應該,這是有道理的,讓它保證不改變對象),以及第二其他物質是get是否有意義的,因爲在C前綴++ (通常不是,它只是不必要的冗長,而在Java中有一些工具可以很好地利用這樣的前綴),我只是把它叫做node

+0

出於某種原因,我必須將該向量聲明爲const。否則,我得到錯誤「葉是私人的」 – AmazingVal

+0

hm,那些問題,常量和訪問,彼此沒有任何關係。或者正如我們常說的那樣,它們是正交的。 –

相關問題