50 / 50 / 1
Регистрация: 12.10.2009
Сообщений: 152
|
|
1 | |
Подключение .h файлов25.06.2011, 02:24. Показов 3646. Ответов 17
Метки нет (Все метки)
Всем доброго времени суток!)
Недавно открыл для себя что весьма не удобно работать с огромным количеством строк. Решил один главный .срр файл разбить на несколько. Создал необходимые .h файлы, которые подключал в Stdadx.h.В них прописал extern переменные и функции. Также сделал соответствующие .сpp файлы с телами функций. При компиляции вылетело огромное количество ошибок линковки. Затем переместил тела функций в заголовочные файлы, но тут другая проблема, т.к. в наличии обращения к функциям, которые находятся в других файлах и тут выскакивают сообщения о необъявленных идентификаторах. Объясните пожалуйста, что можно сделать в этой ситуации. Заранее спасибо!
0
|
25.06.2011, 02:24 | |
Ответы с готовыми решениями:
17
Подключение внешних файлов Решение проблем с множественным подключение заголовочных файлов на gcc Подключение заголовочных файлов и файлов реализации Подключение файлов js |
Freelance
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
|
|
25.06.2011, 02:34 | 2 |
Создай пустой проект и не парся с никакими Stdadx.h, оно тебе надо ?
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
25.06.2011, 07:28 | 3 |
срр-файлы нужно не просто создать, но и к проекту подключить. Хэдеры подключать не обязательно, они просто должны быть, а вот срр-файлы подключать необходимо.
Добавлено через 52 секунды А вот так делать не стоит. В stdafx.h нужно помещать только редко-изменяемые хэдэры.
1
|
50 / 50 / 1
Регистрация: 12.10.2009
Сообщений: 152
|
|
25.06.2011, 15:01 [ТС] | 4 |
Сейчас исправил, сделал таким образом. Убрал объявления хедеров из Stdafx. Поместил строки типа #include "Terraforming.h" в сpp файлы. Теперь эти жалкие три хедера и три сpp файла видят друг друга) Но... проблема появилась в главном срр файле. Так как у меня Win32 проект, то соответственно имеются кнопки и прочее. В коде расположены идентификаторы IDC_RADIO1, DialogBox(...), IDM_EXIT. Всё это вызывает сообщение "необъявленный идентификатор", хотя до разбиения одного файла на несколько такого не было. В чём здесь может быть проблема?
P.S. По поводу подключения cpp файлов. В списке исходников проекта они есть. Или, Deviaphan, ты имел ввиду, что их надо через #include подключать ещё?
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
25.06.2011, 15:03 | 5 |
Нет, не это имел в виду. Ошибка компоновки бывает если нет объектноо кода, т.е. или прототипы функций не совпадают или их вообще нет.
По поводу идентификаторов. Добавь #include "resource.h"
1
|
50 / 50 / 1
Регистрация: 12.10.2009
Сообщений: 152
|
|
25.06.2011, 18:55 [ТС] | 6 |
Думаю это будет последний проблемой...
После всех махинаций выскакивают error LNK2005: "int map" (?map@@3HA) уже определен в Argentum Engine.obj. Пробовал удалять obj файл с пересобирать проект - не помогло, менял многопоточную отладку - не помогло.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
26.06.2011, 07:09 | 8 |
Переменные в хэдэрах должны быть со словом extern.
0
|
Заблокирован
|
|
27.06.2011, 08:19 | 9 |
Объясните пожалуйста, зачем в хедере может понадобится декларация самостоятельных переменных?
Нет, я понимаю... определение статик переменных там каких нить, которые находятся в пространстве класса. Но зачем объявлять обычные переменные? Подозреваю, что это как то связанно со стилем программирования, когда множество разных данных лежат в глобальном пространстве. Мне просто интересно, в чем тут может быть профит?
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
27.06.2011, 08:39 | 10 |
Хотя бы, для отказа от констант задаваемых при помощи #define.
Да и std::cin/cout никто не отменял, хотя они несколько иначе объявлены. Они задаются без слова extern. Для того же, для чего в хэдэрах требуется декларация прототипов функций. У меня сегодня нет настроения для холивара по поводу глобальных переменных. Скажу лишь, что необходимость в них есть.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
27.06.2011, 14:20 | 12 |
std:cin/cout - глобальные переменные.
Замена #define констант и создание аналогичных переменных. Городить синглтон по каждому пустяку тоже не дело.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
28.06.2011, 09:47 | 13 |
Deviaphan, По сути переменные заключенные в namespace таки не являются глобальными.
0
|
Заблокирован
|
|
28.06.2011, 10:31 | 14 |
Даже заостряться не хочу насчёт std:cin/cout ))
А в чём профит от замены дефайнов обычными глобальными переменными? Я понимаю... там, если дефайны менять на енумы какие нить, константы... Но обычные переменные! Они ж ещё и память кушать будут.... А по поводу синглтона... это вообще, наверное, отдельная тема. К слову, ни разу не сталкивался с ситуацией, когда позарез нужно было гарантировать, что объект будит создан в единственном экземпляре. И да, кстати, если, идеологически объект может существовать только в единственном экземпляре, то накой чорт вообще нужен объект? Тут по-мойму, прям таки просятся какие нибудь неймспейсы с функциями и ... глобальными(?) данными.... >_<
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
28.06.2011, 10:50 | 15 |
Соглашусь.) Но необходимость указания extern они не отменяют.
Не переживай, понимание придёт. Примерно, когда создание "Hello world" перестанет вызывать вопросы, понимание начнёт приходить.) У меня не желания плагиатить, поэтому просто почитай про шаблоны проектирования. Там подробно описано не только как, но и зачем.
0
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
|
28.06.2011, 11:12 | 17 |
В переводе на русский, паттерн и есть шаблон. По стечению обстоятельств pattern & template одинаково переводится. Пичалька.
Т.е. после чтения Александреску и GoF такой вопрос остался? о_0 Перечитай обоих, срочно! Добавлено через 5 минут Дословно из Александреску (кстати, он тоже вместо паттерны использует слово шаблон)
0
|
Заблокирован
|
|
28.06.2011, 11:33 | 18 |
0
|
28.06.2011, 11:33 | |
28.06.2011, 11:33 | |
Помогаю со студенческими работами здесь
18
Подключение файлов .js подключение файлов Подключение файлов подключение файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |