C++ 如何访问类中结构的数据成员?
我编写了这个类和成员函数,并在主函数中创建了对象。它可以很好地调用show函数,但是show函数本身说它无法访问root,因为它没有在作用域中声明。我将数据成员设置为public,并且我认为我不需要getter/setter。允许show()访问root的最佳方式是什么C++ 如何访问类中结构的数据成员?,c++,C++,我编写了这个类和成员函数,并在主函数中创建了对象。它可以很好地调用show函数,但是show函数本身说它无法访问root,因为它没有在作用域中声明。我将数据成员设置为public,并且我认为我不需要getter/setter。允许show()访问root的最佳方式是什么 class bst { public: struct Node { public: int
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
}
看起来您并没有将
struct节点的实例定义为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
,而不是节点的声明
类:
class bst
{
public:
struct Node
{
public:
int data;
struct Node *left;
struct Node *right;
};
Node* root = NULL;
void show();
};
在这种情况下,您不需要使用节点限定引用。
如第一个示例所示。看起来您并没有将结构节点的实例定义为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
,而不是节点的声明
类:
class bst
{
public:
struct Node
{
public:
int data;
struct Node *left;
struct Node *right;
};
Node* root = NULL;
void show();
};
在这种情况下,您不需要使用节点限定引用。
如第一个示例所示。使用this->root
?您可以分享您的完整代码吗?root
应该是bst
的成员,而不是bst::Node
。我认为bst::show()
应该把Node*
作为它的参数。@songyuanyao:Good-point在root
上可能是在错误的位置。这就是说,show
是一个成员函数,因此如果root
是bst
的成员,bst::show
不需要将其作为参数。@ShadowRanger但是OP正在做类似于show(root->left)的事情代码>@songyuanyao:啊,没错。这里有一些设计问题需要解决。:-)使用this->root
?您可以分享您的完整代码吗?root
应该是bst
的成员,而不是bst::Node
。我认为bst::show()
应该把Node*
作为它的参数。@songyuanyao:Good-point在root
上可能是在错误的位置。这就是说,show
是一个成员函数,因此如果root
是bst
的成员,bst::show
不需要将其作为参数。@ShadowRanger但是OP正在做类似于show(root->left)的事情代码>@songyuanyao:啊,没错。这里有一些设计问题需要解决。:-)这就解决了一行代码的编译问题,但是我如何使用它进行递归调用呢?显示(根->左)@Raznarok:似乎show
应该是节点本身的一种方法,在这里他们知道如何递归地显示他们自己和他们的子节点(在这个设计中递归调用是left->show()
和right->show()
)bst
sshow
将是一个微不足道的包装器,它只调用root->show()
。另一种选择(将逻辑保持在bst
中)是使用show
来获取Node*
参数,show(Node*Node)
,其中没有参数的show()
是一个包装器,调用show(root)
,一个参数show
将与show(Node->left)一起递归
,等等。这解决了一行代码的编译问题,但是我如何使用它进行递归调用呢?显示(根->左)@Raznarok:似乎show
应该是节点本身的一种方法,在这里他们知道如何递归地显示他们自己和他们的子节点(在这个设计中递归调用是left->show()
和right->show()
)bst
sshow
将是一个微不足道的包装器,它只调用root->show()
。另一种选择(将逻辑保持在bst
中)是使用show
来获取Node*
参数,show(Node*Node)
,其中没有参数的show()
是一个包装器,调用show(root)
,一个参数show
将与show(Node->left)一起递归
等。