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

10-11 09:02