2014-10-16 3 views
0

Я пытаюсь узнать о списках ссылок и узлах, и я не понимаю эту ошибку, которую я получаю в моей структуре узла. Это код, который работал прекрасно, без прямого заявления в заголовкеПрямое объявление, вызывающее проблемы в файле заголовка

#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 

теперь, когда я пытаюсь компилируем это, я получаю сообщение об ошибке: поле «данные» имеет неполный тип. Если я прокомментирую структуру, все работает нормально. Что я делаю не так? Я считаю, что это правильный способ сделать узел, не так ли? Так как в Sentence есть связанный список Узлов с Словами в них. Таким образом, «данные» - это Word, а затем - указатель на узел. Тип Word должен быть приемлемым из-за оператора include, у меня нет проблем с прототипом функции «Word first();» в и т. д. кода, так почему он говорит мне, что «данные» имеют неполный тип?

+0

Почему вы переадресовываете Sentence в собственный заголовочный файл? – DaveyLaser

+0

Преступник, очевидно, «Слово». Но вы не показываете, как объявляется слово. Как это объявлено? – AnT

+1

@laser_wizard, потому что мой пункт.h должен знать о классе Sentence –

ответ

1

Мой хрустальный шар подсказывает мне, что ваша проблема не имеет ничего общего с декларацией вперед и всем, что связано с включением кругового заголовка. Тот же самый балл говорит мне, что в какой-то момент word.h начал включать sentence.h прямо или косвенно. Теперь, поскольку ваш sentence.h включает в себя word.h, а также созданный круговой цикл включения.

Циркулярное включение никогда не достигает ничего, кроме странных «необъяснимых» ошибок компиляции.

Смежные вопросы