前向声明导致头文件出现问题

时间:2014-10-16 18:52:39

标签: c++ linked-list nodes

我正在尝试了解链接列表和节点,我不明白我在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

现在当我尝试编译它时,我收到一个错误:字段'data'的类型不完整。如果我注释掉结构,一切正常。我究竟做错了什么?我相信这是制作节点的正确方法吗?在句子中是一个带有单词的节点的链接列表。因此,'data'是一个Word,next是指向Node的指针。由于include语句,Word类型应该是可以接受的,我对函数原型“Word first();”没有任何问题。在代码的etc部分,为什么它告诉我“数据”的类型不完整?

1 个答案:

答案 0 :(得分:1)

我的水晶球告诉我你的问题与前方声明无关,而且与圆形标题包含有关。同一个球告诉我,在某些时候word.h开始直接或间接地包含sentence.h。现在,由于您的sentence.h也包含word.h,因此产生了循环包含循环。

除了奇怪的"无法解释的"圆形包含永远无法实现任何目标。编译错误。