2013-08-01 41 views
-2
template<typename Type> class ListNode{ 
private: 
    Type nodeData; 
    ListNode *nextNode; 

    friend class SingleList<Type>; 
    ListNode():nextNode(NULL){} 
    ListNode(const Type item,ListNode<Type> *next=NULL):nodeData(item),nextNode(next){} 
    ~ListNode(){ 
     nextNode=NULL; 
    } 

public: 
    Type GetData(); 
    friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);  
}; 


template<typename Type> Type ListNode<Type>::GetData(){ 
    return this->nodeData; 
} 
//here, compiler said 'nodeData is a private member of ListNode<int>' 

編譯器說,「NODEDATA是的私有成員ListNode」如何讓C++中的私有變量

我怎樣才能得到一個私有變量?

或c + +中的任何get/set函數,如Java?

+0

「這裏」是指在GetData函數處,返回this-> nodeData;或者在右大括號之後的空白處? – doctorlove

+0

@doctorlove在這裏意味着GetData函數,返回this-> nodeData – tonysok

+0

如果您將模板中的GetData定義移動了,該怎麼辦?即Type GetData(){return nodeData; }; –

回答

0

是的,你應該使用get/set方法來獲取數據。

要傳遞實際的對象,你應該使用一個指針或引用。

傳遞副本只是按值傳遞。

這是Java和C++在傳遞對象時的主要區別。

您的getdata方法僅返回nodeData的副本,具體取決於您是否要執行此操作。如果它的一個大對象應該通過引用來完成,否則一個副本就沒有問題。

編輯: 至於說它是一個私有變量,我不知道它爲什麼這樣做。我複製了你的代碼並自己運行,沒有編譯錯誤。

0

不,實際上你是正確的,除了你的構造函數和析構函數方法是私人的。他們應該在您的主要功能中調用的公共方法中。