Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何访问类中结构的数据成员?_C++ - Fatal编程技术网

C++ 如何访问类中结构的数据成员?

C++ 如何访问类中结构的数据成员?,c++,C++,我编写了这个类和成员函数,并在主函数中创建了对象。它可以很好地调用show函数,但是show函数本身说它无法访问root,因为它没有在作用域中声明。我将数据成员设置为public,并且我认为我不需要getter/setter。允许show()访问root的最佳方式是什么 class bst { public: struct Node { public: int

我编写了这个类和成员函数,并在主函数中创建了对象。它可以很好地调用show函数,但是show函数本身说它无法访问root,因为它没有在作用域中声明。我将数据成员设置为public,并且我认为我不需要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
}

看起来您并没有将
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
s
show
将是一个微不足道的包装器,它只调用
root->show()
。另一种选择(将逻辑保持在
bst
中)是使用
show
来获取
Node*
参数,
show(Node*Node)
,其中没有参数的
show()
是一个包装器,调用
show(root)
,一个参数
show
将与
show(Node->left)一起递归
,等等。这解决了一行代码的编译问题,但是我如何使用它进行递归调用呢?显示(根->左)@Raznarok:似乎
show
应该是
节点本身的一种方法,在这里他们知道如何递归地显示他们自己和他们的子节点(在这个设计中递归调用是
left->show()
right->show()
bst
s
show
将是一个微不足道的包装器,它只调用
root->show()
。另一种选择(将逻辑保持在
bst
中)是使用
show
来获取
Node*
参数,
show(Node*Node)
,其中没有参数的
show()
是一个包装器,调用
show(root)
,一个参数
show
将与
show(Node->left)一起递归
等。