首页 文章

为什么我无法访问此私有变量?

提问于
浏览
-1

我试图用OOP制作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:我对OOP不太好,只是开始研究它,对不起英语也不好意思

3 回答

  • 1

    问题在于:

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

    SetLeft 不是 Node 的成员,因此无法访问 Node 的私有成员 .

    你可能意味着:

    void Node::SetLeft(Node* newnode){
    

    等下面的 SetRight 也有同样的问题 .

  • -1

    node.cpp 中使用范围分辨率运算符写入 SetLeft . 它应该被写为: void Node::SetLeft(parameters)SetRight 也应该以相同的方式写入 .

  • 0

    代替:

    Node::left = newnode;
    

    使用:

    this->left = newnode;
    

    通过使用Node :: left,您将尝试访问未声明的静态成员 .

    'this'反映了你正在使用的类实例!

相关问题