1

Прошу прощения, если этот вопрос уже был дан, но я пытался реализовать прекомпилированные заголовки в своем игровом движке без успеха.Ошибка предварительного скомпилированного заголовка в Visual Studio 2015

Мой предкомпилированного заголовок называется UtilBase.h:

#pragma once 

#if !defined(NF3D_UTIL_BASE_H) 
#define NF3D_UTIL_BASE_H 

// This is a precompiled header. 
#pragma message("Compiling precompiled header.") 

// Include engine specific files. 
#include <Utilities\Platform\Types.h> 

// Include external header files (STL, Win32 API, Direct3D 11, etc) 

// There are some typedefs here: 
typedef __int32 int32; // And so on. 

#endif 

Хотя это противоречит стандартам, я включил UtilBase.h в другие заголовки, потому что мне нужен доступ к некоторым из его содержания. Он также входит во все файлы .cpp, в первой строке, из текущего проекта (решение имеет два проекта).

Мне нужно это в некоторых заголовках, потому что в нем хранятся некоторые typedef s, которые используются в объявлениях функций. Например, у меня есть файл с именем Window.h:

#pragma once // And include guards that are omitted here 
int32 NF3DCreateWindow(); 

Соответствующий исходный файл называется UtilBase.cpp и имеет только одну строку кода:

#include <Utilities\UtilBase.h> 

Проект был установлен правильно, на мой взгляд:

enter image description here

для всех платформ и конфигураций.

UtilBase.cpp имеет следующую установку: enter image description here

Однако, когда я компилирую, я получаю эту ошибку:

1>Source Files\Utilities\UtilBase.cpp(2): error C2857: '#include' statement specified with the /YcD:\New Frontiers\NewFrontiers3D\Header Files\Utilities\UtilBase.h command-line option was not found in the source file

, который указывает на единственной линии в UtilBase.cpp (#include <Utilities\UtilBase.h>).

Почему это происходит и что я могу сделать, чтобы заставить его работать? Я с удовольствием отправлю дополнительную информацию об этом сценарии. Заранее большое спасибо.

+0

Вы делаете это неправильно. #include для предварительно скомпилированного заголовка всегда должен быть первым #include в файле .cpp. Поэтому совершенно ненужно и неправильно включать его в файл .h. Так как это будет означать, что вы сначала включите этот файл .h. –

+0

@HansPassant Пожалуйста, проверьте изменения и скажите мне, если я все еще не прав. –

ответ

0

Наконец сделал это! Для любого в моей ситуации вот что я сделал: в настройках проекта, Precompiled Header File тег, я добавил $(ProjDir)\Header Files\Utilities\UtilBase.h, и он был оценен с полным путем файла. Правильный способ - просто добавить файл: Utilities\UtilBase.h и все.

Благодарим вас за поддержку.

-2

попробовать #ifndef вместо #if! Определен

+3

Как бы это решить? – cpburnz

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