2017-02-16 10 views
1

Мое приложение работает правильно, но я пытаюсь что-то прояснить. Когда я включаю заголовок precompile в свои исходные файлы, я получаю следующее.Необходимо включить заголовок предварительной компиляции дважды

WTF

В основном первая строка указываются, как если есть проблема с ним, так что я должен включить его снова снизу, с правильным путем ... но я нужен как и он не будет компилировать ,

Любые идеи?

+1

Вы говорите, что если вы удалите первый, он не скомпилируется? Не могли бы вы добавить к вопросу о том, какой текст появляется? Кроме того, знаете ли вы о https://stackoverflow.com/a/26330290/4944425? –

+3

Должен быть только * один предварительно скомпилированный файл заголовка, и все исходные файлы в проекте должны согласовать, какой из них он есть. Так что довольно высокие шансы, что первый не используется вообще, и что вы получили предупреждение об этом, то, что программисты часто не видят по какой-то причине. Улучшите свой вопрос, сообщив нам, что вы видите. –

+0

У вас, вероятно, есть 2 файла ... один в правильном месте для предварительно скомпилированных заголовков, а другой в другом месте с правильным контентом. – Phil1970

ответ

4

Visual Studio использует предварительно скомпилированный заголовок, только если имя совпадает (имя не чувствительно к регистру). Скажем, в вашем проекте задано предварительно скомпилированное имя заголовка StdAfx.h, поэтому только тогда, когда код содержит #include "stdafx.h", тогда используется предварительно скомпилированный заголовок.

#include "..\stdafx.h" не считается прекомпилированным заголовком, даже если он является реальным местоположением.

Вам необходимо добавить путь к местоположению stdafx.h в свои настройки проекта, а затем заголовок #include "stdafx.h" будет работать правильно.

Другая распространенная проблема с предварительно скомпилированным заголовком заключается в том, что директива include находится в заголовке. Он всегда должен находиться в исходном файле (.ccp).

+0

Вы ошибаетесь в отношении последних. '# include' может быть легко использован другими файлами заголовков. Просто ознакомьтесь с заголовками Standart Library, чтобы проверить это. –

+0

Все еще неплохая возможность проверить, будет делать в течение недели, надеюсь, но это звучит многообещающе. Благодарю. – Nick

+1

@SemyonBurov, Представьте, что '#include" stdafx.h "' находится в заголовке некоторой библиотеки. Он работает без сбоев при компиляции библиотеки, но при компиляции проекта, который использует эту библиотеку, используется предварительно скомпилированный заголовок из проекта. Теперь он не будет компилироваться, если ваш прекомпилированный заголовок проекта не содержит всю необходимую библиотеку. Теперь это звучит не так. – frido