![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Gwendolen |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Пожалуйса помогите разобраться с структурой сложного проекта.
Чтобы вечно не писать #ifdef _EXTRABUILD ... #endif, я создал заголовочный файл со следующей структурой extra.h:
Если использовать в одном модуле то все ОК: prjmain.cpp
А если подключить в sam_other.cpp
то линкер то ругается на multiple definition of `_mes(wchar_t const*)' _EXTRABUILD задается глобально в настройках компилятора. Вопрос в следующем: как получить возможность подключить extra.h ко всем (или не всем но нескольким - по желанию) модулям проекта? --------------------
Наносите пользу и причиняйте добро! |
||||||
|
|||||||
| Любитель |
|
||||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Вообще такое решение - не лучший вариант...
Но раз уж просят. Исправляется так: 1. ExtraBuild.h:
2. ExtraBuild.cpp
|
||||
|
|||||
| Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
А как лучше, чтобы не портить читаемость кода МНОГОЧИСЛЕННЫМИ #ifdef _EXTRABUILD ... #endif? --------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
а что конкретно нужно? -------------------- qqq |
|||
|
||||
| Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
Нужно не сильно испортив читабельность исходного кода, физически исключить из определенной сборки некоторые процедуры. А так как тема называется Структура проекта С+ хотелось бы получиь информацию о модульном программировании на С++, из тех учбников что есть уменя дальше самых общих случаев ни чего нет (справочная информация по С++ на моем винте занимает 120 747 771 байт --------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Gwendolen,
на multiple definition у тебя ругается потому, что функция реализована непосредственно в заголовочном файле. Сделай её inline и должно пройти.
Лучше препроцессорв не придумали. Правда можно менять варианты реализации, просто линкуя разные объектные файлы или статические библиотеки. Тогда не нужно трогать заголовки. В привычном понимаии (например как в Delphi) в С++ такого нет. Вся модульность это статические библиотеки и динамические библиотеки. Выбирать конкретную реализацию стоит на основе требований проекта. |
|||
|
||||
| Gwendolen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 5.4.2005 Репутация: нет Всего: 1 |
А что мой пример, не юзает препроцессор, но с помощью макросов. А так определив функции в CPP, а объявив в H все заработало. --------------------
Наносите пользу и причиняйте добро! |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Вопрос по этой же теме:
В header - файле задаются следующие константы:
Код не буквальный, сам факт, что задается несколько константных строк. Если подключать этот файл к нескольким cpp-файлам, то компилер GCC ( Code::Blocks 1.0 RC2 ) выдает ту же самую ошибку: Multiple definition < здесь каждая из объявленных строчек > Причем ошибки выдает одновременно и в моих header -ах, и в своих библиотеках. У кого было что-то похожее и чем можно это исправить? |
|||
|
||||
| Damarus |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
JackYF, ответ тот же:
file.h
file.cpp:
|
||||
|
|||||
| Earnest |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Это и есть использование препроцессора. Я еще иногда, чтобы подчеркнуть отладочность кода, использую макросы типа DEBUG_ONLY: Определение (в каком-нибудь общем h-файле):
Использование:
Очевидно, что вместо DEBUG, можно использовать и другие макросимволы. Желательно только, чтобы название макроса отражало суть. Тогда в коде сразу видно, что к чему. Закрывать ли макросимволом тело функций - дел вкуса. Я лично обычно не закрываю - это дело по ходу проекта по 10 раз меняется. -------------------- ... |
||||||
|
|||||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Damarus, respect. Не подумал.
P.S. Билдер-то такую штуку компилил нормально, вот я уже и привык |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |