例如:
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
}
答案 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。