我已经写了这个类和成员函数,并在main函数中创建了对象。它调用show函数就好了,但show函数本身表示它无法访问root,因为它没有在范围内声明。我将数据成员设置为公共成员,我并不认为我需要一个getter / setter。什么是允许show()访问root的最佳方式?
class bst
{
public:
struct Node
{
public:
int data;
struct Node *left;
struct Node *right;
Node* root = NULL;
};
void show();
};
void bst::show()
{
if(root == NULL) return;
show(root->left); //Visit left subtree
printf("%d ",root->data); //Print data
show(root->right); // Visit right subtree
}
答案 0 :(得分:2)
您实际上并未将struct Node
的实例定义为bst
类的成员。您定义了嵌套类,但未声明它的实例。声明一个,你可以使用它声明的名称来完成这项工作,例如:
class bst
{
public:
struct Node
{
public:
int data;
struct Node *left;
struct Node *right;
Node* root = NULL;
};
Node node;
void show();
};
void bst::show()
{
if(node.root == NULL) return;
show(node.root->left); //Visit left subtree
printf("%d ",node.root->data); //Print data
show(node.root->right); // Visit right subtree
}
您可能意味着root
成为bst
的成员,在这种情况下,您需要重新排列内容以将其放入bst
,而不是声明Node
类:
class bst
{
public:
struct Node
{
public:
int data;
struct Node *left;
struct Node *right;
};
Node* root = NULL;
void show();
};
在这种情况下,您不需要使用node.
来限定引用,如第一个示例所示。