59

Cuando intento compilar mi proyecto C++ utilizando Visual Studio 2010 en modo de Win32 o x64 me sale el siguiente error:Fatal error: "No Arquitectura de destino" en Visual Studio

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

mis definiciones del preprocesador diga WIN32; _DEBUG; _CONSOLE;% (PreprocessorDefinitions)

¿Qué está causando este error y cómo lo soluciono?

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

Actualización: Creé un nuevo proyecto de msvs y copié mi código en él. Ya no tengo error : "No Target Architecture", pero ahora tengo un montón de errores de compilación que involucran winnt.h y winbase.h y no hay errores de compilación que involucren ninguno de mis archivos. ¿Es posible que estos archivos estén dañados? ¿Debo reinstalar MSVS 2010?

Actualización 2: Así que reduje mi problema y descubrí que es #include <WinDef.h> el que causa todos mis errores de compilación con winnt.h pero sigo sin saber cómo solucionarlo.

+0

¿Cómo configuro la arquitectura de destino para mi proyecto? – philipvr

+0

Un proyecto de vanilla no falla de esta manera. ¿Qué has cambiado de un proyecto de vanilla? ¿Qué hay en la línea 135 de winnt.h? ¿Has mirado esa línea del archivo de encabezado? El mensaje de error te está dando ayuda. –

+0

deberías poder resolverlo desde aquí; probablemente necesite regresar antes de la línea 127 para obtener una imagen completa. Parecería claro que Edwin estaba en lo correcto. –

Respuesta

100

Use #include <windows.h> en lugar de #include <windef.h>.

Desde la página de Wikipedia 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 es uno de los archivos incluidos de forma automática con windows.h.

+0

Pensé en eso, pero no pude imaginar que no incluyeras windows.h. –

+1

windows.h define los alkinds de otros define en base a los compiladores-switches e incluye muchos WINAPI-headers, algunos de los cuales dependen de las cosas definidas por windows.h. –

+0

¡Felicitaciones, ha solucionado su problema ** y ** tiene suficiente representante para votar! –

4

_El identificador de Win32 no está definido.

uso #include <SDKDDKVer.h>

MSVS generado proyectos envuelven esto incluyen mediante la generación de un local de "targetver.h" que se incluye por "stdafx.h" que se comiled en un precompilado-cabecera a través de "stdafx.cpp".

EDITAR: ¿tiene un/D "WIN32" en su línea de comandos?

+0

Ya tengo '#include ' en mi 'targetver.h' – philipvr

+0

, su comentario fue más rápido que mi edición. –

+0

Sí, tengo '/ D" WIN32 "' en mis opciones de línea de comandos. – philipvr

2

Parece que _AMD64_ no está definido, ya que no puedo imaginar que esté compilando para Itanium (_IA64_).

+0

_AMD64_ se definirá bajo ciertas condiciones: #if! defined (_68K_) &&! defined (_MPPC_) &&! defined (_X86_) &&! defined (_IA64_) &&! defined (_AMD64_) && defined (_M_AMD64) –

+0

@Edwin Si se definió '_AMD64_' o' _IA64_', entonces no obtendría el error. Eso es lo que dice el archivo de encabezado. –

+0

philipvr ha actualizado su publicación. Él tiene otros (más) problemas. Está pensando en reinstalar MSVS. –

0

Si está compilando 32 bits, asegúrese de que no tiene definido _WIN64 para su proyecto.

14

Otra causa de esto puede ser incluir un encabezado que depende de windows.h, antes de incluir windows.h.

En mi caso incluí xinput.h antes de windows.h y obtuve este error. Intercambiar el orden resolvió el problema.

+3

¡Exactamente mi solución! Gracias por ahorrarme horas de frustración. – Acidic

1

Otro motivo del error (entre muchos otros que surgieron al cambiar la compilación de destino de un proyecto de Win32 a X64) no era tener los compiladores de C++ de 64 bits instalados como se indica en la parte superior de this page.
Además de philipvr de comentar en las cabeceras de los niños, (en mi caso) un explícito incluyen de winnt.h siendo unnecessary cuando windows.h estaba siendo utilizado.

0

Tuve un problema similar.En mi caso, había incluido accidentalmente winuser.h antes de windows.h (en realidad, una extensión IDE defectuosa lo había agregado). Al eliminar el winuser.h, se solucionó el problema.

Cuestiones relacionadas