2013-08-01 6 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++

как я могу получить приватную переменную?

или любые функции get/set в C++, такие как Java?

+0

«Здесь» означает функцию GetData, возвращающую this-> nodeData; или в пробелы после закрывающей скобки? – doctorlove

+0

@doctorlove здесь, означает функцию GetData at, return this-> nodeData – tonysok

+0

Что делать, если вы переместите определение GetData внутри шаблона? т. е. введите GetData() {return nodeData; }; –

ответ

0

Да, вы должны использовать методы get/set для получения данных.

Для передачи фактического объекта вы должны использовать указатель или ссылку.

Чтобы передать копию, просто перейдите по значению.

Это основное отличие между Java и C++ при передаче объектов.

Ваш метод getdata возвращает только экземпляр nodeData, который зависит от того, что вы захотите сделать или нет. Если его большой объект он должен делать по ссылке, в противном случае копия в порядке.

Редактировать: как для него, говоря, что это частная переменная, я не уверен, почему она это делает. Я скопировал ваш код и сам запускал его без ошибки компилятора.

0

Нет, на самом деле вы делаете правильно, за исключением того, что методы вашего конструктора и деструктора находятся в закрытом режиме. Они должны быть в общедоступных методах, которые вызываются из вашей основной функции.

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