Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/20: Рейтинг темы: голосов - 20, средняя оценка - 4.65
50 / 50 / 1
Регистрация: 12.10.2009
Сообщений: 152
1

Подключение .h файлов

25.06.2011, 02:24. Показов 3646. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток!)
Недавно открыл для себя что весьма не удобно работать с огромным количеством строк. Решил один главный .срр файл разбить на несколько. Создал необходимые .h файлы, которые подключал в Stdadx.h.В них прописал extern переменные и функции. Также сделал соответствующие .сpp файлы с телами функций. При компиляции вылетело огромное количество ошибок линковки. Затем переместил тела функций в заголовочные файлы, но тут другая проблема, т.к. в наличии обращения к функциям, которые находятся в других файлах и тут выскакивают сообщения о необъявленных идентификаторах.
Объясните пожалуйста, что можно сделать в этой ситуации. Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2011, 02:24
Ответы с готовыми решениями:

Подключение внешних файлов
Здравствуйте!на visual C++ программирую недавно.Каким образом можно подключить к проге файлы типа...

Решение проблем с множественным подключение заголовочных файлов на gcc
Добрый день. Есть проблема с множественным подключением заголовочных файлов скомпилированных на...

Подключение заголовочных файлов и файлов реализации
Здравствуйте,при создании класса в visual studio руками не компилится проект,при создании через add...

Подключение файлов js
Есть 4 файла, которые нужны мне рабочие на одной из страниц: <script...

17
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 секунды
Цитата Сообщение от SoproMaster Посмотреть сообщение
Создал необходимые .h файлы, которые подключал в Stdadx.h
А вот так делать не стоит. В 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
Заблокирован
25.06.2011, 22:04 7
Цитата Сообщение от SoproMaster Посмотреть сообщение
Думаю это будет последний проблемой...
После всех махинаций выскакивают 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
Цитата Сообщение от Deviaphan Посмотреть сообщение
Переменные в хэдэрах должны быть со словом extern.
Объясните пожалуйста, зачем в хедере может понадобится декларация самостоятельных переменных?
Нет, я понимаю... определение статик переменных там каких нить, которые находятся в пространстве класса.

Но зачем объявлять обычные переменные?
Подозреваю, что это как то связанно со стилем программирования, когда множество разных данных лежат в глобальном пространстве.

Мне просто интересно, в чем тут может быть профит?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
27.06.2011, 08:39 10
Цитата Сообщение от Bers Посмотреть сообщение
в чем тут может быть профит?
Хотя бы, для отказа от констант задаваемых при помощи #define.
Да и std::cin/cout никто не отменял, хотя они несколько иначе объявлены.

Цитата Сообщение от Bers Посмотреть сообщение
определение статик переменных там каких нить, которые находятся в пространстве класса.
Они задаются без слова extern.

Цитата Сообщение от Bers Посмотреть сообщение
зачем в хедере может понадобится декларация самостоятельных переменных?
Для того же, для чего в хэдэрах требуется декларация прототипов функций.

У меня сегодня нет настроения для холивара по поводу глобальных переменных. Скажу лишь, что необходимость в них есть.
0
Заблокирован
27.06.2011, 14:15 11
просто я даже представить себе не могу ситуацию, при которой существование глобальных переменных являлось бы необходимостью
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
Цитата Сообщение от Deviaphan Посмотреть сообщение
std:cin/cout - глобальные переменные.
Замена #define констант и создание аналогичных переменных.
Городить синглтон по каждому пустяку тоже не дело.
Даже заостряться не хочу насчёт std:cin/cout ))

А в чём профит от замены дефайнов обычными глобальными переменными?
Я понимаю... там, если дефайны менять на енумы какие нить, константы... Но обычные переменные! Они ж ещё и память кушать будут....

А по поводу синглтона... это вообще, наверное, отдельная тема. К слову, ни разу не сталкивался с ситуацией, когда позарез нужно было гарантировать, что объект будит создан в единственном экземпляре.

И да, кстати, если, идеологически объект может существовать только в единственном экземпляре, то накой чорт вообще нужен объект? Тут по-мойму, прям таки просятся какие нибудь неймспейсы с функциями и ... глобальными(?) данными.... >_<
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.06.2011, 10:50 15
Цитата Сообщение от ForEveR Посмотреть сообщение
По сути переменные заключенные в namespace таки не являются глобальными.
Соглашусь.) Но необходимость указания extern они не отменяют.

Цитата Сообщение от Bers Посмотреть сообщение
И да, кстати, если, идеологически объект может существовать только в единственном экземпляре, то накой чорт вообще нужен объект?
Не переживай, понимание придёт. Примерно, когда создание "Hello world" перестанет вызывать вопросы, понимание начнёт приходить.) У меня не желания плагиатить, поэтому просто почитай про шаблоны проектирования. Там подробно описано не только как, но и зачем.
0
Заблокирован
28.06.2011, 10:55 16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Соглашусь.) Но необходимость указания extern они не отменяют.


Не переживай, понимание придёт. Примерно, когда создание "Hello world" перестанет вызывать вопросы, понимание начнёт приходить.) У меня не желания плагиатить, поэтому просто почитай про шаблоны проектирования. Там подробно описано не только как, но и зачем.
Шаблоны проектирования... гм.. Вы не ошиблись?
Вы действительно имели ввиду шаблоны проектирования, а не паттерны проектирования?

Что именно мне ещё раз стоит перечитать: Банду четырёх, или Александресску?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.06.2011, 11:12 17
Цитата Сообщение от Bers Посмотреть сообщение
шаблоны проектирования, а не паттерны проектирования
В переводе на русский, паттерн и есть шаблон. По стечению обстоятельств pattern & template одинаково переводится. Пичалька.
Т.е. после чтения Александреску и GoF такой вопрос остался? о_0 Перечитай обоих, срочно!

Добавлено через 5 минут
Дословно из Александреску (кстати, он тоже вместо паттерны использует слово шаблон)
Следовательно, синглтоны можно использовать в приложениях при моделировании типов, имеющих только один экземпляр, таких как Keyboard, Display, PrintManager и SystemClock
Хотя, Display тут явно лишний...
0
Заблокирован
28.06.2011, 11:33 18
Цитата Сообщение от Deviaphan Посмотреть сообщение
В переводе на русский, паттерн и есть шаблон. По стечению обстоятельств pattern & template одинаково переводится. Пичалька.
Т.е. после чтения Александреску и GoF такой вопрос остался? о_0 Перечитай обоих, срочно!
Обязательно так и сделаю.
0
28.06.2011, 11:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2011, 11:33
Помогаю со студенческими работами здесь

Подключение файлов .js
Ребята помогите пожалуйста стаким вопросом: Суть проблемы. есть 2 файла HTML и 2 файла .js Из...

подключение файлов
есть сайт, сделанный по шаблону. страницы разложены по каталогам. например: /index.php...

Подключение файлов
Здравствуйте, помогите разобраться у меня стоит локальный сервер denwer,есть папка site, в ней...

подключение файлов
Объясните для новичка пожалуйста :wall: Я хочу сделать верх сайта, низ (футер) и менюшку на все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru