C++ 错误C2027或C2029取决于定义顺序
我有一个类“Nodes”和一个结构“Mark”。“Nodes”中的对象具有struct“Mark”元素,“Mark”中的对象具有类“Nodes”元素 问题是错误:C2027(使用未定义的类型“type”)或C2029(类节点)。C++ 错误C2027或C2029取决于定义顺序,c++,C++,我有一个类“Nodes”和一个结构“Mark”。“Nodes”中的对象具有struct“Mark”元素,“Mark”中的对象具有类“Nodes”元素 问题是错误:C2027(使用未定义的类型“type”)或C2029(类节点)。 所以我不能改变定义这些东西的位置,因为我会得到新的错误(例如,如果之前是C2029,则为C2027)。我如何解决这个问题?这不起作用。如果每个节点都包含一个标记,并且每个标记都包含一个节点,那么您将拥有一个无止境的实例链 你的意思可能是说他们彼此有关系 如果是这样的话,
所以我不能改变定义这些东西的位置,因为我会得到新的错误(例如,如果之前是C2029,则为C2027)。我如何解决这个问题?这不起作用。如果每个节点都包含一个标记,并且每个标记都包含一个节点,那么您将拥有一个无止境的实例链 你的意思可能是说他们彼此有关系 如果是这样的话,你应该使用a或者最好是a 即使如此,编译器在解析之前也必须知道类型存在,因此您需要: 或者,使用智能指针 (你需要检查你需要哪一个智能指针,我做了一个有根据的猜测,并假设你需要一个共享指针):
#包括
类节点;
结构标记{
int-q;
std::共享ptr启动;
};
类节点{
受保护的:
字符串节点名称;
std::共享ptr标记;
};
如果它们真的相互包含,那么它们的大小将是无限的。也许你指的是指针?在这种情况下,您可以简单地使用转发声明。请将错误消息复制粘贴到问题中。我们中的一些人不记得错误代码。我建议在你的答案后面附加一个使用智能指针的例子。谢谢!但现在我有了一个新错误:C2678(二进制“运算符”:没有定义接受“type”类型的左侧操作数的运算符(或者没有可接受的转换))。我看不出在您展示的代码中会发生什么。你能帮我发一个帖子吗?在我的情况下,我只需要一个指向节点的标记。所以我怎么能做出一个参考(我指的是这样的:<代码> Mark mark;节点节点;MARK.Stase= No.;/Cuth>),这似乎是一个简单的问题,但是在C或C++中,它不是真的。恐怕一个简单的示例对您帮助不大,只会引导您进入下一个雪崩般的错误(编译时和运行时)。我建议读一本好书(我是一个枯燥的人),或者在线教程中关于C++中的“指针”和“引用”的话题。作为一个提示:如果少于10页,它甚至没有开始涵盖这个主题。
struct Mark {
int q;
Nodes start;
};
class Nodes {
protected:
string Node_Name;
Mark mark;
};
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;
};