Избегать занятий не видеть друг друга? C ++ - PullRequest
0 голосов
/ 28 февраля 2012

Я только что вступил в связь ада с созданным проектом. Я перемещаю несколько вещей в моих заголовочных файлах и теперь сталкиваюсь с тем, что некоторые объекты не могут видеть другие объекты, несмотря на то, что я использую #indef, #define и #endif в каждом заголовочном файле.

Я заметил, что в одном из моих старых файлов я использую класс Region с классом World.

Поскольку класс World продолжал жаловаться на невозможность увидеть другой класс, я смог пройти мимо него, просто включив класс Region; выше этого.

Есть ли способ избежать подобных вещей?

Спасибо.

1 Ответ

2 голосов
/ 28 февраля 2012

Один из способов избежать проблем с включением / зависимостью - попытаться минимально объявить определения классов / структур, где это возможно (однако, только указатели / ссылки, спасибо Aldo за указание на это). Скажем, у вас есть этот класс:

class foo
{
    bar* barObject;
};

Очевидно, что бар должен быть определен в какой-то момент ранее. Вместо того, чтобы включать заголовочный файл bar, мы можем просто добавить следующую строку прямо перед определением foo.

class bar;

Это не позволяет компилятору жаловаться на то, что bar не определена, но также не требует включения всего заголовка. (известный как предварительная декларация)

Я обнаружил, что это минимизирует много досадных включений, которые могут возникнуть, когда есть циклические зависимости и еще много чего.

Это может или не может помочь в вашем случае, так как очень трудно диагностировать вашу конкретную проблему с помощью предоставленной вами информации, но это может послужить отправной точкой.

Больше чтения: http://www -subatech.in2p3.fr / ~ фотонов / subatech / мягкий / Карнак / CPP-INC-1.shtml

...