2015-09-17 2 views
-1

Этот вопрос касается того, что после более чем года с C++ я не могу решить или найти решение об этом.Об обновлении заголовочных файлов C++

Я привык использовать отдельные файлы для заголовков и кода на C, но у меня есть проблема с ним на C++: всякий раз, когда я редактирую заголовочный файл и пытаюсь скомпилировать код, который его использует снова, компилятор не выполняет обратите внимание на изменение заголовка.

Что я делаю, чтобы решить это, «компилировать» заголовок (.hpp) в одиночку. Иногда я просто добавляю его в список исходных файлов для g ++ вместе с остальной частью кода, но потом происходит то, что я должен выполнить команду дважды (первый раз это дает мне ошибки, но не второй раз). Он также предупреждает меня, что я использую параметр «pragma once» в основном файле.

Я знаю, что это очень неправильно, поэтому я искал правильный способ сделать это без успеха. Я заметил, что g ++ генерирует файлы «.gch», но я действительно не знаю, какова их цель, хотя они могут быть связаны.

Я подозреваю, что проблема вызвана кодом в «.hpp». Я знаю (я думаю), что хороший способ сделать это - определить прототипы только внутри заголовка и написать тело методов в отдельном файле, но иногда (особенно при использовании шаблонов) это создает еще больше проблем.

+3

Вы действительно строить свою программу во всех поступках неправильности. Однако мы ничего не можем сказать о вашей проблеме без шагов воспроизведения. Компилятор не может «не заметить» изменения, потому что исходный файл, а также все, что '' include '' _allways_ полностью компилируется, когда вы, um, скомпилируете его. Скорее всего, вы не настроили свою систему сборки должным образом для разрешения зависимостей заголовков source →. Если вы используете GNU Make, [эта документация] (https://www.gnu.org/software/make/manual/html_node/Automatic-Prerequisites.html) поможет вам; Тем временем мы не можем помочь. –

+0

@LightnessRacesinOrbit Я не могу понять, как сделать PM другим пользователям, поэтому я делаю плохое дело и размещаю сообщение для вас здесь. Я просто хотел, чтобы вы знали, что цитата Алисии Сильверстоун в вашем профиле сделала мою неделю. Спасибо, сэр. – RyanP

+0

@ RyanP: lol np; p –

ответ

0

.gch - предварительно скомпилированный заголовок, и он создается, если вы явно скомпилируете файл заголовка.
Затем компилятор будет использовать этот файл вместо фактического заголовка (компилятор не заботится о временных методах изменения).

Сделайте rm *.gch и оставьте все заголовки вне команды компиляции навсегда.

(не ставить реализации шаблона в .cpp файлах.)

+0

хорошо хорошая точка –

Смежные вопросы