转发声明导致头文件出现问题

Forward declaration causing problems in header file

本文关键字:问题 文件 声明 转发      更新时间:2023-10-16

我正在尝试了解链接列表和节点,但我不理解我在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"的类型不完整。如果我注释掉这个结构,一切都很好。我做错了什么?我相信这是制作节点的正确方法,不是吗?"如在句子中"是一个包含单词的节点的链接列表。因此,"数据"是一个字,下一个是指向节点的指针。由于include语句,Word类型应该是可以接受的,我对代码etc部分的函数原型"Word first();"没有问题,那么为什么它告诉我"data"的类型不完整呢?

我的水晶球告诉我,您的问题与正向声明无关,而是与循环头包含有关。同一个球告诉我,在某个时刻word.h开始直接或间接地包括sentence.h。现在,由于您的sentence.h也包含word.h,因此产生了循环包含循环。

除了奇怪的"无法解释的"编译错误之外,循环包含从来没有取得任何成就。