Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136

Почему нельзя компилировать отдельный заголовочный файл?

12.08.2012, 11:57. Показов 2621. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообще можно весь код поместить в один .cpp файл. Но, как я понимаю, люди советуют все функции помещать в отдельные заголовочные файлы. А потом эти заголовочные файлы подключать директивой #include в основной файл .cpp. Хотя я не понимаю, чем это лучше то? Не вижу преимуществ. Не так давно задал этот вопрос своему шефу. Но только он задачи решает не на С++ как я, а на Фортране. Для Фортрана у него какая-то среда разработки аналогичная Visual Studio 2010. Так он взял и открыл какой-то проект, а потом открыл отдельный заголовочный файл в нём (содержащий какую-то функцию) и нажал на компиляцию. Так-то это на самом деле довольно удобно получается, если можно компилировать и, соответственно, искать ошибки в каждом отдельном файле проекта. Но почему в Студии для С++ так нельзя? (это и есть мой вопрос к Вам). Я открываю любой заголовочный файл, захожу в пункт меню Построение, а подпункт Компилировать затемнён. То есть компилировать получается только основной файл .cpp. Короче, я так понял, что заниматься численными методами действительно лучше на Фортране. Но при этом в Студии в окне ошибок пишут в каком именно файле проекта и в какой строчке там ошибка.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.08.2012, 11:57
Ответы с готовыми решениями:

Кто знает почему он у меня не хочет сохранять в формате .bpr? И нельзя компилировать?
Только установила С++

Почему не компилируется заголовочный файл?
//run.cpp #include <iostream> using std::cout; using std::endl; #include "GradeBook.h" int main() { GradeBook...

Почему GCC не компилирует заголовочный файл пользователя ?
Здравствуйте ! При компиляции учебной программы в GCC, выдаётся сообщение "No such file or directory". Компилятор не принимает...

6
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
12.08.2012, 12:05
Советуют не сами функции помещать в заголовочный файл, а их объявления.
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
12.08.2012, 12:24
canopen,

Не по теме:

как по мне, лучше закинуть функции в некий array.h, чем делать два файла типа : array.h (прототипы) и array.cpp (сами функции). Меньше мороки, ведь не надо в обоих файлах менять объявления, если вдруг добавил фактический параметр.

0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
12.08.2012, 12:29
nexen, когда узнаешь про раздельную компиляцию и зачем она нужна, возвращайся.
0
432 / 433 / 93
Регистрация: 16.07.2012
Сообщений: 886
12.08.2012, 12:33
Цитата Сообщение от fasked Посмотреть сообщение
nexen, когда узнаешь про раздельную компиляцию и зачем она нужна, возвращайся.
Ну кстати отсутствие модулей в C++ - это один из главных его недостатков. Кстати вот здесь про проблемы C++ очень хорошо и подробно написано.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
12.08.2012, 13:01
компилятор обрабатывает translation unit-ы, а это source файл + хидеры. т.е. хидеры сами по себе еденицей трансляции не являются и не компилируются.
В студии есть возможность компиляции одного файла (сорца) из текущей вкладки (Ctrl-F7). По идее совсем не сложно и возможно в других IDE даже есть возможность проверять именно хидеры. Для этого IDE должна была бы сгенерить временный почти нустой спп файл в включенным инклудником, который хотят проверить и скомпилировать его. После этого удалить. В студии это наверно можно сделать кастомными командами.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
14.08.2012, 16:02
Цитата Сообщение от canopen Посмотреть сообщение
Ну кстати отсутствие модулей в C++ - это один из главных его недостатков. Кстати вот здесь про проблемы C++ очень хорошо и подробно написано.
Почитал. Почти все из разряда "Не осилил".
Цитата Сообщение от DU Посмотреть сообщение
компилятор обрабатывает translation unit-ы, а это source файл + хидеры. т.е. хидеры сами по себе еденицей трансляции не являются и не компилируются.
Это тоже неверно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2012, 16:02
Помогаю со студенческими работами здесь

Почему Не Определён Ctrcmp, тема про заголовочный файл string.h
Здравствуйте вот код, компилятор пишет что не определён ctrcmp, заголовочный файл писал по разному...

Объявления классов в *.h, или почему просто не приписать заголовочный файл #include <QProgressBar>?
Доброго времени суток. Не пойму почему Шлее в хэдерах объявляет классы следующим образом: #ifndef PROGRESS_H #define PROGRESS_H ...

Почему выносят объявление класса в отдельный файл
почему не правильно выносить классы Х файл, и рекомендуют в хереде объявления а в спп описание* чем плохо, если все будет в х файле?

Почему не работает пример, перенесенный в отдельный HTML файл?
Взял пример отсюда, перенес на отдельную страницу - не работает, пишет какую-то хрень: Почему на codepen.io пример работает, а у...

Зачем нужен h-файл? Почему нельзя все хранить в cpp?
Помогите новичку! С с++ работаю впервые. Перешел с явы, делфи, рнр. Не понимаю что такое h-файл и чем он отличается от cpp и почему нельзя...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru