我有一个“节点”类和一个“标记”结构。来自“节点”的对象具有结构“标记”的元素,而“标记”的对象具有类“节点”的元素。
struct Mark {
int q;
Nodes start;
};
class Nodes {
protected:
string Node_Name;
Mark mark;
};
问题出在以下错误:C2027(使用未定义的类型'type')或C2029(类节点)。 因此,我无法更改定义这些内容的位置,因为我会收到新的错误(例如,如果以前是C2029,则会出现C2027)。我该如何解决这个问题?
答案 0 :(得分:1)
这不起作用。如果每个节点都包含一个标记,并且每个标记都包含一个节点,那么您将拥有无休止的实例链。
您可能是说他们彼此有引用?
如果是这样,则应使用pointer,最好使用smart pointer。
即使那样,编译器也必须在解析之前知道类型是否存在,因此您需要使用forward declaration:
class Nodes;
struct Mark {
int q;
Nodes* start;
};
class Nodes {
protected:
string Node_Name;
Mark* mark;
};
或者,使用智能指针 (您将需要检查所需的智能指针,我进行了有根据的猜测,并假设您需要共享的指针):
#include <memory>
class Nodes;
struct Mark {
int q;
std::shared_ptr<Nodes> start;
};
class Nodes {
protected:
string Node_Name;
std::shared_ptr<Mark> mark;
};