Прошу прощения, если этот вопрос уже был дан, но я пытался реализовать прекомпилированные заголовки в своем игровом движке без успеха.Ошибка предварительного скомпилированного заголовка в 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>
Проект был установлен правильно, на мой взгляд:
для всех платформ и конфигураций.
UtilBase.cpp
имеет следующую установку:
Однако, когда я компилирую, я получаю эту ошибку:
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>
).
Почему это происходит и что я могу сделать, чтобы заставить его работать? Я с удовольствием отправлю дополнительную информацию об этом сценарии. Заранее большое спасибо.
Вы делаете это неправильно. #include для предварительно скомпилированного заголовка всегда должен быть первым #include в файле .cpp. Поэтому совершенно ненужно и неправильно включать его в файл .h. Так как это будет означать, что вы сначала включите этот файл .h. –
@HansPassant Пожалуйста, проверьте изменения и скажите мне, если я все еще не прав. –