![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
SAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 27.3.2002 Где: Moscow Репутация: нет Всего: нет |
GREETINGS!
Господа, подскажите, пожалуйста. Начну сначала - у диалога есть файл .H и .CPP . Отдельно у меня есть файл заголовка X.H, где описана некоторая структура. И вот - диалог, использующий Х.Н вызывает другой диалог, который тоже использует Х.Н, но уже в своем файле заголовка. И меня выкидывают в Х.Н и говорят, что тип уже определен. Нельзя ли это как-нибудь обойти или нужно продумывать новую схему работы? Спасибо. Удачи! SAV |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Попробуй директиву кампилятора #if или #ifdef
-------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
SAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 27.3.2002 Где: Moscow Репутация: нет Всего: нет |
GREETINGS!
Nastya, спасибо за совет, но такой способ не получается или я чего-то недопонял. У меня один .CPP включает два .H, но каждый из этих .H включает один и тот же файл X.H, а как это предотвратить с помощью тех директив, я не понимаю. Все равно, спасиобо. Удачи! |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Как я себе это представляю:
В том файле X.H у тебя что? Вот все те определения которые у тебя "уже определены" запихиваешь внутрь #ifdef Мне кажеться так! ![]() -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Имелось в виду следущее. Возьми за правило обрамлять содержимое h-файла в следующие директивы
#ifndef FileH #define FileH // содержимое файла File.H //здесь под File - имется имя конкретного файла. #endif Смысл в следующем. Если File.h ни разу не встречался(FileH не определено), препроцессор определит FileH ( директива #define FileH) и включит содержимое File.H для последующей компиляции. При последующих вхождениях директива #ifndef FileH - даст результат false и все содержимое от #ifndef FileH до #endif будет проигнорировано. Этим ты гарантируешь однократное включение содержимого h-файл в процесс компиляции вне зависимости от того, сколько раз ты его включал. Вторым способом избежать повтороного включения является предварительное объявление c переносом хидера из интерфейсного файла(*.h) в файл реализации(*.cpp) . Т.е. вместо Файл Class2.h #include "Class1.h" class Class2 { ... Class1* ggg; ... }; делаешь следующее Файл Class2.h class Class1; class Class2 { ... Class1* ggg; ... }; Файл Class2.cpp #include "Class2.h" #include "Class1.h" .... -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
SAV |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 27.3.2002 Где: Moscow Репутация: нет Всего: нет |
GREETINGS!
Большое спасибо Вам Nastya и Вам, Вячеслав! Наконец то понял. Еще раз спасибо. Удачи! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |