2016-07-02 3 views
0

У меня есть два файла: 1) Заголовочный файл .h, который перекрестно ссылается на структуру в общем файле заголовка, который ссылается на другие структуры внутри моего. h заголовочный файл.Как перекрестно ссылаться на структуру в общем файле, ссылаясь на другую структуру

2) Ссылка на структуру I в 1) содержится в общем файле заголовка, который не ссылается на другие структуры. 3) Когда я включаю general.h, он не будет компилироваться для других структур в 1) файле заголовка.

Вот 1) мой .h файл, он включает general.h файл для того, чтобы ссылаться на IntervalFilter:

... 
struct AgentConfig { 
    AgentConfig(); 
    IntervalFilter<int> myFilter; 

    other structs 
... 
} 

Но general.h файл включает в себя 1) и ссылку на другие структуры внутри файла.

Любой совет относительно синтаксиса?

Спасибо!

+3

Можете ли вы перефразировать свой вопрос. Это совершенно невозможно: «У меня есть заголовочный файл .h, который позволяет перекрестно ссылаться на структуру в общем заголовочном файле, ссылаясь на другие структуры внутри моего файла заголовка .h». - это не вычисляется. –

+0

См. Выше. –

+0

Это лучше, но все же очень запутанно: «Файл заголовка .h, который перекрестно ссылается на структуру в общем заголовочном файле». Файл заголовка не «перекрестно ссылается» на что-либо. Заголовочный файл содержит декларации классов, шаблонов и других структур данных. «назад ссылаясь на другие структуры внутри моего файла заголовка .h». Что такое «обратная ссылка»? Является ли «my .h header file» тем же заголовком, который упоминается в начале или другом заголовочном файле? Попробуйте забыть все, что вы знаете, прямо сейчас, затем прочитайте свой вопрос и попытайтесь выяснить, что это значит. –

ответ

0

Из того, что я понял, у вас есть два заголовка, которые включают друг друга. Вы никогда не должны допускать эту ситуацию, потому что препроцессинг даст один заголовок над другим (если у вас есть защитники заголовка или #pragma один раз), а один этих заголовков всегда будет пропустить нужный материал.

Есть несколько способов решить эту ситуацию:

  1. Extract независимый материал («другие Структуры» вы имели в виду) в файл третьего заголовка и разрешиться 1 < - цикл> 2 в «треугольник» 1 -> 3, 2 -> 3 и 1 -> 2
  2. Использовать форвардные объявления вместо включения файла заголовка (не будет работать, если вам нужен полный тип, например, не указатель/ссылка)
Смежные вопросы