Visual Studio 2015中预编译的标头错误

时间:2016-06-10 16:30:03

标签: c++ visual-studio compiler-errors visual-studio-2015 precompiled-headers

请原谅,如果这个问题已经得到解答,但我一直试图在我的游戏引擎中实现预编译的头文件,但到目前为止还没有成功。

我的预编译标头名为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。例如,我有一个名为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&gt; Source Files \ Utilities \ UtilBase.cpp(2):错误C2857:&#39; #include&#39;使用/ YcD指定的语句:在源文件中找不到/ New Frontiers \ NewFrontiers3D \ Header Files \ Utilities \ UtilBase.h命令行选项

指向UtilBase.cpp#include <Utilities\UtilBase.h>)中唯一的一行。

为什么会发生这种情况,我该怎么做才能让它发挥作用?我很乐意发送有关此方案的任何进一步信息。非常感谢你提前。

2 个答案:

答案 0 :(得分:0)

终于成功了!对于我所处的任何人来说,这就是我所做的:在项目设置中,Precompiled Header File标记,我添加了$(ProjDir)\Header Files\Utilities\UtilBase.h,并将其评估为文件的完整路径。正确的方法是简单地添加文件:Utilities\UtilBase.h,就是这样。

感谢您的支持。

答案 1 :(得分:-2)

尝试#ifndef而不是#if!defined