Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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++ 错误C2027或C2029取决于定义顺序_C++ - Fatal编程技术网

C++ 错误C2027或C2029取决于定义顺序

C++ 错误C2027或C2029取决于定义顺序,c++,C++,我有一个类“Nodes”和一个结构“Mark”。“Nodes”中的对象具有struct“Mark”元素,“Mark”中的对象具有类“Nodes”元素 问题是错误:C2027(使用未定义的类型“type”)或C2029(类节点)。 所以我不能改变定义这些东西的位置,因为我会得到新的错误(例如,如果之前是C2029,则为C2027)。我如何解决这个问题?这不起作用。如果每个节点都包含一个标记,并且每个标记都包含一个节点,那么您将拥有一个无止境的实例链 你的意思可能是说他们彼此有关系 如果是这样的话,

我有一个类“Nodes”和一个结构“Mark”。“Nodes”中的对象具有struct“Mark”元素,“Mark”中的对象具有类“Nodes”元素

问题是错误:C2027(使用未定义的类型“type”)或C2029(类节点)。
所以我不能改变定义这些东西的位置,因为我会得到新的错误(例如,如果之前是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;  
};