[英]How to access private struct in class?
我想訪問我的Node結構,以創建一個生成新節點的函數。 為此,我認為唯一的方法是在我的結構中創建一個構造函數並在我的CreateNode函數中調用該構造函數。 但是我得到一個錯誤:[Error]'struct BS :: Node'受保護。 一個解決該問題的方法是將struct Node公開,但是我想問一問是否還有另一種訪問我的struct並將它保持私有的方法。
頭文件
class BS
{
public:
BS(); //constructor
protected:
struct Node{
int data;
Node* left;
Node* right;
Node(int d,Node* lf ,Node* ri)
:data(d),left(lf),right(ri){}
};
Node* root;
Node* CreateNode(int data);
};
CPP
BS::BS(){
root=NULL;
}
BS::Node* CreateNode(int data){
Node* new_node= new Node(0,NULL,NULL);
return new_node;
}
將公共類與私有構造函數一起使用,並使外部類成為朋友:
class BS
{
public:
BS(); //constructor
class Node {
// note: private constructor
Node(int d,Node* lf ,Node* ri)
:data(d),left(lf),right(ri){}
int data;
Node* left;
Node* right;
// befriends BS
friend BS;
};
Node* CreateNode(int data);
private:
Node* root = nullptr;
};
BS::Node* BS::CreateNode(int data){
Node* new_node= new Node(0, nullptr, nullptr);
return new_node;
}
int main()
{
}
ps。 不要使用原始指針。 使用std::unique_ptr
不,你不能創建CreateNode
功能,你會喜歡的方式,甚至是友誼,因為這個函數會返回一個BS::Node
之外的BS
,而Node
保護:
#include <BS.hh>
BS::BS()
{
root=nullptr;
}
BS::Node* BS::CreateNode(int data)
{
BS::Node* new_node = new BS::Node(0,nullptr,nullptr);
return new_node;
}
int main()
{
BS bs;
BS::Node* = bs.CreateNode(1); // <- Error, returning a BS::Node outside BS!
return 0;
}
但是您可以在BS
內部使用CreateNode
與:
class BS
{
public:
BS(); //constructor
protected:
struct Node{
int data;
Node* left;
Node* right;
Node(int d,Node* lf ,Node* ri)
:data(d),left(lf),right(ri){}
};
BS::Node* CreateNode(int data);
BS::Node* root = CreateNode(0); // inside BS it's OK
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.