致命错误:Visual Studio中的“无目标体系结构”

当我尝试在Win32或x64模式下使用Visual Studio 2010编译我的c ++项目时,出现以下错误:

>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture"

我的预处理器定义说WIN32; _DEBUG; _CONSOLE;%(PreprocessorDefinitions)

什么是造成这个错误,我该如何解决它?

 // winnt.h: lines 127-136, MSVS says this is an inactive preprocessor block #if defined(_WIN64) #if defined(_AMD64_) #define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD ) #elif defined(_IA64_) #define PROBE_ALIGNMENT( _s ) (TYPE_ALIGNMENT( _s ) > TYPE_ALIGNMENT( DWORD ) ? \ TYPE_ALIGNMENT( _s ) : TYPE_ALIGNMENT( DWORD )) #else #error "No Target Architecture" #endif 

更新:我创build了一个新的msvs项目,并将我的代码复制到它。 我不再有error : "No Target Architecture" ,但现在我有一堆涉及winnt.h和winbase.h编译错误,并没有涉及我的任何文件的编译错误。 这些文件是否可能损坏? 我需要重新安装MSVS 2010吗?

更新2:所以我缩小了我的问题,发现它是#include <WinDef.h>这是导致所有我编译错误与winnt.h,但我仍然不知道如何解决它。

使用#include <windows.h>而不是#include <windef.h>

windows.h维基百科页面:

有一些自动包含在windows.h的子头文件。 这些文件中的大多数不能简单地被自己包含(它们不是自包含的 ),因为依赖关系。

windef.hwindows.h自动包含的文件之一。

另一个原因可能是在包含windows.h之前,包含一个依赖于windows.h的头文件。

在我的情况下,我在windows.h之前包含了xinput.h ,并得到这个错误。 交换订单解决了这个问题。

_WIN32标识符未定义。

使用#include <SDKDDKVer.h>

MSVS生成的项目包装这包括通过生成一个本地"targetver.h" ,其中包括"stdafx.h"通过"stdafx.cpp"发送到预编译头。

编辑:你的命令行上有/ D“WIN32”吗?

看起来_AMD64_没有被定义,因为我无法想象你正在编译安腾( _IA64_ )。

如果您正在构build32位,请确保您没有为您的项目定义_WIN64。

错误的另一个原因(在将Win32项目的目标版本更改为X64时出现的许多错误)没有安装C ++ 64位编译器,如本页顶部所述。
除了philipvr对子标题的评论之外(在我的情况下),当使用windows.h时,显式包含winnt.h是不必要的 。

我有一个类似的问题。 在我的情况下,我不winuser.hwindows.h之前包含了winuser.h (实际上,一个有问题的IDE扩展已经添加了它)。 删除winuser.h解决了这个问题。