我正在尝试了解链接列表和节点,但我不理解我在Node结构中遇到的此错误。这是工作得很好的代码,头中没有前向声明
#ifndef SENTENCE_H
#define SENTENCE_H
#include"word.h"
class Sentence{
public:
struct Node{
Word data;
Node * next;
};
//etc
#endif // SENTENCE_H
但是后来我不得不添加功能原型,这需要我将其更改为
#ifndef SENTENCE_H
#define SENTENCE_H
class Sentence;
#include"paragraph.h"
#include"word.h"
class Sentence{
public:
struct Node{
Word data;
Node * next;
};
//etc, etc
现在,当我尝试编译它时,我得到一个错误:字段“数据”具有不完整的类型。如果我注释掉该结构,一切正常。我究竟做错了什么?我相信这是制作节点的正确方法,不是吗?就像句子中一样,是其中包含单词的节点的链接列表。因此,“数据”是一个单词,下一个是指向节点的指针。由于包含语句,Word类型应该可以接受,我对函数原型“ Word first();”没有任何疑问。在代码的etc部分中,那么为什么它告诉我'data'具有不完整的类型?
最佳答案
我的水晶球告诉我,您的问题与正向声明无关,而与圆形标头包含无关。同一球告诉我word.h
在某个时候开始直接或间接包括sentence.h
。现在,由于您的sentence.h
也包含word.h
,因此产生了循环包含循环。
除了奇怪的“无法解释的”编译错误外,循环包含并不能达到任何目的。
关于c++ - 前向声明导致头文件中的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26411793/