为什么我不能访问这个私有变量?
Why I cant access this private variable?
我试图用 OOP 制作 BST,我的讲师希望我将节点制作成 class,所以我制作了这段代码
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;
};
但是当我 运行 它时,我对非静态数据成员的使用无效
任何人都可以帮助我应该怎么做才能设置左节点和右节点?
注意:我对 OOP 不太好,刚开始研究它,也很抱歉英语不好
而不是:
Node::left = newnode;
使用:
this->left = newnode;
通过使用 Node::left,您正在尝试访问未声明的静态成员。
'this' 反映到您正在使用的 class 实例!
问题出在:
void SetLeft(Node* newnode){
Node::left = newnode;
};
此 SetLeft
不是 Node
的成员,因此它无法访问 Node
的私有成员。
你的意思可能是:
void Node::SetLeft(Node* newnode){
等下面的SetRight
也有同样的问题。
在 node.cpp
中使用作用域解析运算符写入 SetLeft
。它应该写成: void Node::SetLeft(parameters)
并且 SetRight
也应该以相同的方式写成。
我试图用 OOP 制作 BST,我的讲师希望我将节点制作成 class,所以我制作了这段代码
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;
};
但是当我 运行 它时,我对非静态数据成员的使用无效
任何人都可以帮助我应该怎么做才能设置左节点和右节点? 注意:我对 OOP 不太好,刚开始研究它,也很抱歉英语不好
而不是:
Node::left = newnode;
使用:
this->left = newnode;
通过使用 Node::left,您正在尝试访问未声明的静态成员。
'this' 反映到您正在使用的 class 实例!
问题出在:
void SetLeft(Node* newnode){
Node::left = newnode;
};
此 SetLeft
不是 Node
的成员,因此它无法访问 Node
的私有成员。
你的意思可能是:
void Node::SetLeft(Node* newnode){
等下面的SetRight
也有同样的问题。
在 node.cpp
中使用作用域解析运算符写入 SetLeft
。它应该写成: void Node::SetLeft(parameters)
并且 SetRight
也应该以相同的方式写成。