|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.01.2011, 15:40 | #1 |
Регистрация: 21.01.2011
Сообщений: 7
|
разделение программы на файлы и последующая компиляция
например, имеется 3 файла "file.h" с объявлением класса, "file.cpp" с реализацией методов класса и "mainfile.cpp", в котором находится сама программа, почему в учебниках, которые я читал, в "mainfile.cpp" включается файл с объявлением класса ("file.h"), у меня программа работает, только если в "mainfile.cpp" включить файл с реализацией класса ("file.cpp", в который я, естесственно включаю файл с объявлением класса - "file.h"). объясните почему так происходит. (Windows XP, Codeblocks)
|
21.01.2011, 16:27 | #2 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
тут всё зависит от параметров компиляции или системы сборки
далее лучше пусть гуру codeblocks посоветуют, как там поступать с этим, т.к. лично я использую cmake, но товарищу cmake явно пока что ни к чему
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su |
21.01.2011, 16:38 | #3 |
Форумчанин
Регистрация: 12.01.2011
Сообщений: 186
|
Компилятор, ОС?
Так навскидку: может у вас в file.cpp есть что-то кроме реализации класса? И file.cpp желательно тоже выложить.
Lingua c++ non penis caninus est.
Последний раз редактировалось Dayman; 21.01.2011 в 16:40. |
21.01.2011, 17:29 | #4 |
Регистрация: 21.01.2011
Сообщений: 7
|
to dayman: Windows XP sp3, Codeblocks (file.h, file.cpp, mainfile.cpp - просто используются для примера)
нет, с file.cpp все впорядке. если я собираю программу в linux с включением file.h в mainfile.cpp то все получается, а в windows - нет. |
21.01.2011, 18:34 | #5 |
Форумчанин
Регистрация: 09.11.2009
Сообщений: 104
|
заключите ваш класс в защитные от повторного включения макросы
например Код:
|
21.01.2011, 19:41 | #6 |
Пользователь
Регистрация: 02.12.2010
Сообщений: 81
|
#pragma once на visual studio
|
21.01.2011, 21:30 | #7 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
pragma — это то, при игнорировании чего компиляция всё равно будет работать! А если её проигнорировать, то проект собираться наверняка не будет. Так что надо делать так:
Код:
pragma once будет подключать хедер единожды и игнорировать просьбы о повторном его подключении. Но это pragma, она не всеми компиляторами поддерживается, т.к. не является частью стандарта. Конструкция, называемая include guard, будет пытаться его подключать каждый раз, но все разы, после первого, будет доходить до ifndef. То есть второе медленнее (на этапе компиляции!) и работает везде, а второе быстрее, но не является частью стандарта, хоть и поддерживается некоторыми компиляторами (в т.ч. gcc). http://ru.wikipedia.org/wiki/Pragma_once http://ru.wikipedia.org/wiki/Include_guard
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 21.01.2011 в 21:47. |
21.01.2011, 21:39 | #8 |
Форумчанин
Регистрация: 09.11.2009
Сообщений: 104
|
>То есть второе медленнее (на эта компиляции!) и работает везде, а второе быстрее, но не является частью стандарта, хоть и поддерживается некоторыми компиляторами (в т.ч. gcc).
Быстрее медленнее для чего для кого? И у меня код был без #pragma once Последний раз редактировалось Stilet; 22.01.2011 в 14:22. |
21.01.2011, 21:46 | #9 | |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
Цитата:
А теперь финт ушами! Оказывается, если в компиляторе есть pragma once, то он и обычный include guard оптимизирует. Это касается практически всех компиляторов. То есть на деле pragma once не нужен, достаточно include guards.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Stilet; 22.01.2011 в 14:22. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Компиляция программы и её запуск | Kasper1 | Общие вопросы по Java, Java SE, Kotlin | 2 | 08.01.2011 15:25 |
компиляция многофайловой программы | Анастасия777 | Общие вопросы C/C++ | 3 | 21.12.2010 16:56 |
(c/c++)компиляция программы | @lenk@ | Помощь студентам | 0 | 02.06.2010 20:46 |
разделение программы | world12_tk | Помощь студентам | 2 | 30.03.2009 20:05 |