2015-06-16 4 views
-1

Im пытаясь из BST с объектно-ориентированного программирования, и мой преподаватель хочет, чтобы я сделал узел в классе, так что я сделал этот кодПочему я не могу получить доступ к этой частной переменной?

node.h

#ifndef node_h 
#define node_h 
#include <string> 

using namespace std; 

class Node{ 
    public : 
     Node(); 
     Node(Node* left_node, Node* right_node, string newname, string newaddress, int age); 
     ~Node(); 
     // Getter 
     Node* GetLeft(); 
     Node* GetRight(); 
     string GetName(); 
     string GetAddress(); 
     int GetAge(); 
     // Setter 
     void SetName(string newname); 
     void SetAddress(string newaddress); 
     void SetAge(int newage); 
     void SetLeft(Node* newnode); 
     void SetRight(Node* newnode); 
    private : 
     string name,address; 
     int age; 
     Node* left; 
     Node* right; 
}; 

#endif 

node.cpp

#include "node.h" 

using namespace std; 

Node::Node(){ 
    Node::name=""; 
    Node::address=""; 
    Node::age=0; 
    Node::left=NULL; 
    Node::right=NULL; 
}; 

Node::Node(Node* left_node, Node* right_node, string newname, string newaddress, int newage){ 
    Node::left = left_node; 
    Node::right = right_node; 
    Node::name = newname; 
    Node::address = newaddress; 
    Node::age = newage; 
}; 

Node::~Node(){ 

} 

// Getter 
Node* Node::GetLeft(){ 
    return left; 
}; 

Node* Node::GetRight(){ 
    return right; 
}; 

string Node::GetName(){ 
    return name; 
}; 

string Node::GetAddress(){ 
    return address; 
}; 

int Node::GetAge(){ 
    return age; 
}; 

// Setter 
void Node::SetName(string newname){ 
    Node::name = newname; 
}; 

void Node::SetAddress(string newaddress){ 
    Node::address = newaddress; 
}; 

void Node::SetAge(int newage){ 
    Node::age = newage; 
}; 

void SetLeft(Node* newnode){ 
    Node::left = newnode; 
}; 

void SetRight(Node* newnode){ 
    Node::right = newnode; 
}; 

но когда я запускаю его, я получил недействительное использование нестатического элемента данных

Кто-нибудь может помочь, что я должен делать, чтобы установить левый узел и правый узел? NB: Я не так хорошо с ООП, только начинают изучать об этом, простите за плохой английский тоже

+1

Внутри тела вашей функции: 'Node :: name' ->' name' и т. Д. И т. Д. И т. Д. И т. Д. – user657267

+0

отредактировано, спасибо за указание, что – Alv

+1

Вместо «когда я запустил его, я получил недействительное использование нестатического элемента данных «скажите: когда я * скомпилирую * это я получаю: [скопируйте-вставьте свое сообщение об ошибке здесь] –

ответ

1

Проблема заключается в:

void SetLeft(Node* newnode){ 
    Node::left = newnode; 
}; 

Это SetLeft не является членом Node, поэтому он не может получить доступ к закрытым членам в Node.

вероятно Вы имели в виду:

void Node::SetLeft(Node* newnode){ 

т.д. SetRight чуть ниже та же проблема тоже.

+0

Да, это то, что я ищу, моя глупая ошибка, спасибо за помощь мне – Alv

+0

Я изменил свой код так, как вы сказали, но когда я его скомпилирую, я получаю: [c:/mingw/bin /../ lib/gcc/mingw32/4.8.1 /../../../ libmingw32.a (main.o) :(. text.startup + 0xa7): неопределенная ссылка на 'WinMain @ 16' collect2.exe: error: Id вернулся 1 статус выхода] – Alv

+0

@Alv вам нужна функция 'main' –

-1

Вместо:

Node::left = newnode; 

использование:

this->left = newnode; 

С помощью узла: : вы пытаетесь получить доступ к статическому члену, который не объявлен.

«это» отражает экземпляр класса, с которым вы работаете!

+0

у меня получилось« недопустимое использование «этого» в функции, не являющейся членом » – Alv

+0

В члене функция «Node» действительна для использования «Node :: left», чтобы ссылаться на переменную частного члена 'left' –

+0

. Ах, тогда моя ошибка! Немного запутался с C#. Спасибо за исправление. –

0

Напишите SetLeft с разрешением оператора области в node.cpp. Предполагается, что оно должно быть написано так: void Node::SetLeft(parameters) и SetRight также должны быть написаны таким же образом.