59

私は、Win32またはx64モードのいずれかでのVisual Studio 2010を使用して、私のC++プロジェクトをコンパイルしようとすると、私は次のエラーを取得:致命的なエラー:「いいえターゲットアーキテクチャ」Visual Studioで

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

私のプリプロセッサの定義を_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 

更新:私は新しいmsvsプロジェクトを作成し、それに私のコードをコピーしました。私はもはやerror : "No Target Architecture"を持っていませんが、私はwinnt.hとwinbase.hを含むコンパイルエラーがあり、ファイルのコンパイルエラーもありません。これらのファイルが壊れている可能性はありますか? MSVS 2010を再インストールする必要はありますか?

更新2:私は問題を絞り込み、#include <WinDef.h>であることが判明しました。これはwinnt.hでコンパイルエラーを引き起こしていますが、修正方法はまだ分かりません。

+0

プロジェクトのターゲットアーキテクチャを設定するにはどうすればよいですか? – philipvr

+0

バニラプロジェクトはこのように失敗しません。あなたはバニラプロジェクトから何を変えましたか? winnt.hの135行目は何ですか?あなたはヘッダファイルのその行を見たことがありますか?エラーメッセージがあなたにいくつかの助けを与えています。 –

+0

ここから作業することができます。おそらく127行目の前に戻って完全な画像を取得する必要があります。エドウィンが正しいことは明らかです。 –

答えて

100

#include <windef.h>の代わりに#include <windows.h>を使用してください。 windows.hウィキペディアのページから

There are a number of child header files that are automatically included with windows.h . Many of these files cannot simply be included by themselves (they are not self-contained), because of dependencies.

windef.hが自動的windows.hに含まれているファイルの1つです。

+0

私はそれを考えましたが、あなたはwindows.hを含めていないことをイメージできませんでした。 –

+1

windows.hは、コンパイラスイッチに基づいて他の定義のアルファインデックスを定義し、多くのWINAPIヘッダを含みます.WEAPIヘッダはwindows.hで定義されているものに依存します。 –

+0

おめでとう、あなたの問題を修正**して**あなたは投票するのに十分な担当者を持っています! –

4

_WIN32識別子が定義されていません。

使用#include <SDKDDKVer.h>

MSVSは、プロジェクトでは、これが"stdafx.cpp"介してプリコンパイル済みヘッダにcomiledさ"stdafx.h"に含まれるローカル"targetver.h"を生成することによって含めるラップ生成しました。

EDIT:コマンドラインに/ D "WIN32"がありますか?

+0

私の 'targetver.h'に既に' #include 'があります – philipvr

+0

あなたのコメントは私の編集より速かったです。 –

+0

はい、コマンドラインオプションに '/ D" WIN32 "'があります。 – philipvr

2

あなたがItanium(_IA64_)用にコンパイルしているとは思わないので、_AMD64_は定義されていないようです。

+0

_AMD64_はいくつかの条件で定義されます:#if!defined(_68K_)&&!defined(_MPPC_)&&!defined(_X86_)&&!defined(_IA64_)&&!defined(_AMD64_)&& defined(_M_AMD64 ) –

+0

@Edwin '_AMD64_'または' _IA64_'が定義されていれば、エラーは発生しません。ヘッダファイルにはこれが書かれています。 –

+0

philipvrが彼のポストを更新しました。彼は他の(もっと)問題を抱えている。彼はMSVSを再インストールすることを考えています。 –

0

32ビットをビルドする場合は、プロジェクトに_WIN64が定義されていないことを確認してください。

14

windows.hを含む前に、windows.hに依存するヘッダーを含む別の原因が考えられます。

私の場合、の前にxinput.hを含めてこのエラーが発生しました。注文を交換することで問題は解決しました。

+3

まさに私の解決策です!時間を節約してくれてありがとうございました。 – Acidic

1

Win32プロジェクトのターゲットビルドをX64に変更したときにエラーが発生したもう1つの理由は、C++の64ビットコンパイラがインストールされていないためです(this pageの上部)。
子ヘッダに関するphilipvrのコメントに加えて(私の場合)winnt.hunnecessaryの明示的な包含は、windows.hが使用されていました。

0

私は同様の問題がありました。私の場合は、windows.hの前に誤ってwinuser.hが含まれていました(実際にはIDEの拡張機能が追加されています)。 winuser.hを削除すると問題が解決しました。