Почему я не могу получить доступ к этой закрытой переменной?

Я пытаюсь сделать 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

Решение

Проблема в:

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

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

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

void Node::SetLeft(Node* newnode){

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

1

Другие решения

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

0

Вместо:

Node::left = newnode;

использовать:

this->left = newnode;

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

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

-1
По вопросам рекламы [email protected]