访问类私有成员中的struct成员?

时间:2016-10-04 11:03:48

标签: c++ struct private-members

例如:

graph.h

echo

graph.cpp

#ifndef GRAPH_H
#define GRAPH_H

#include <iostream>
#include <string>

using namespace std;

class graph
{
private:
    struct node
    {
        string name;
        int currentValue;
        struct node *next;
    };
    node* head;
public:
    graph();
    ~graph();

    graph(string* newName, int* givenValue);
}

#endif

的main.cpp

#include "graph.h"

graph::graph() {}

graph::~graph() {}

graph::graph(string* newName, int* givenValue)
{
    //This is what I want to achieve
    this->node->name = newName;                    //Compile error
}

如何访问上述函数的 struct node 成员?

这是错误:

#include "graph.h"
#include <iostream>

using namespace std;

int main()
{
    return 0; //Note I have not yet created a graph in main
}

3 个答案:

答案 0 :(得分:1)

问题与您的私有结构无关。构造函数应该能够访问所有私有成员。

您混淆了结构名称node和变量名称head的问题:

  

this-&gt; node-&gt; name = newName; //不正确

相反,你应该写:

 this->head->name = *newName;

答案 1 :(得分:1)

如果要访问类变量,请调用

this->head->name = *newName;

虽然你可以省略this->所以以下是好的

head->name = *newName;

其他几点说明:

  • string* newName是指针,因此您需要使用解除引用运算符“*”(即head->name = *newName;而不是head->name = newName;
  • 来访问其值
  • node* head是一个指针,目前您正在尝试访问未初始化的指针。您可能还需要head = new node();之类的内容。

答案 2 :(得分:0)

您的问题与私人访问无关。首先,添加;以结束您的类声明:

class graph
{
    // ...
};

然后,您键入this->node->name,而node是一种类型。将此行更改为this->head->name。请注意,指针head在此处未初始化。

然后,newName的类型为string*,而this->head->name的类型为string。根据您希望如何使用您的类,您可以考虑修改您的代码:

graph::graph(const string& newName, int givenValue):
    head(new node)
{
    //This is what I want to achieve
    this->head->name = newName;
}

或者像这样:

graph::graph(string* newName, int* givenValue):
    head(new node)
{
    //This is what I want to achieve
    this->head->name = *newName;
}

另请阅读rule of 3/5/0