Erreur fatale: «No Target Architecture» dans Visual Studio

Lorsque j’essaie de comstackr mon projet c ++ à l’aide de Visual Studio 2010 en mode Win32 ou x64, j’obtiens l’erreur suivante:

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

Mes définitions de préprocesseur sont WIN32; _DEBUG; _CONSOLE;% (PreprocessorDefinitions)

Quelle est la cause de cette erreur et comment puis-je la réparer?

 // 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 

Mise à jour: j’ai créé un nouveau projet msvs et y ai copié mon code. Je n’ai plus d’ error : "No Target Architecture" , mais j’ai maintenant un tas d’erreurs de compilation impliquant winnt.h et winbase.h et aucune erreur de compilation impliquant aucun de mes fichiers. Est-il possible que ces fichiers soient corrompus? Dois-je réinstaller MSVS 2010?

Mise à jour 2: J’ai donc réduit mon problème et constaté que c’est #include qui cause toutes mes erreurs de compilation avec winnt.h mais je ne sais toujours pas comment le réparer.

Utilisez #include au lieu de #include .

De la page wikipedia windows.h :

Il existe un certain nombre de fichiers d’en-tête enfants automatiquement inclus dans windows.h . Beaucoup de ces fichiers ne peuvent pas simplement être inclus par eux-mêmes (ils ne sont pas autonomes ), à cause des dépendances.

windef.h est l’un des fichiers inclus automatiquement avec windows.h .

Une autre cause de ceci peut être d’inclure un en-tête qui dépend de windows.h , avant d’inclure windows.h .

Dans mon cas, j’ai inclus xinput.h avant windows.h et j’ai eu cette erreur. Changer l’ordre a résolu le problème.

L’identifiant _WIN32 n’est pas défini.

utilisez #include

Les projets générés par MSVS "targetver.h" cet include en générant un "targetver.h" local inclus par "stdafx.h" qui est compilé dans un en-tête précompilé via "stdafx.cpp" .

EDIT: avez-vous un / D “WIN32” sur votre ligne de commande?

Il semblerait que _AMD64_ ne soit pas défini, car je ne peux pas imaginer que vous _IA64_ pour Itanium ( _IA64_ ).

Si vous construisez 32 bits, assurez-vous que _WIN64 n’est pas défini pour votre projet.

Une autre raison de l’erreur (parmi beaucoup d’autres qui sont apparues lors du changement de la cible cible d’un projet Win32 en X64) n’était pas l’installation des compilateurs C ++ 64 bits comme indiqué en haut de cette page .
Suite au commentaire de philipvr sur les en-têtes enfants, (dans mon cas) une inclusion explicite de winnt.h étant inutile lors de l’utilisation de windows.h .

J’avais un problème similaire. Dans mon cas, j’avais accidentellement inclus winuser.h avant windows.h (en fait, une extension IDE winuser.h avait ajoutée). Supprimer le winuser.h résolu le problème.

https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects

besoin d’installer cela pour se débarrasser de ce problème, prendre du code smaple frais puis comstackr …

Outre les causes déjà décrites, j’ai reçu cette erreur car j’inclurais:

 #include  

Apparemment, ce n’était pas nécessaire (malgré l’appel à CreateDirectoryW). Après avoir commenté, le compilateur était content. Très étrange.