erreur de syntaxe: manquant ';' avant l'identificateur 'PVOID64' lors de la compilation de winnt.h
j'ai récemment obtenu le code source sur une application. Quand j'essaye de construire la solution, j'obtiens une erreur dans toutes les parties où winnt.h
est inclus. Les codes d'erreur diffèrent un peu, mais ils pointent toujours vers ces lignes dans winnt.h:
typedef void *PVOID;
typedef void * POINTER_64 PVOID64;
et
struct {
DWORD crc;
BYTE rgbReserved[14];
} CRC;
alors, quelle pourrait être la cause de cela? winnt.h est un en-tête standard et n'a pas été modifié. Est-ce que cela a quelque chose à voir avec moi en utilisant VS 2010, ou moi en utilisant des fenêtres 64 bits? ou est-ce une sorte de quelle configuration est nécessaire?
modifier: Voici les codes d'erreur exacts:
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64'
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(290): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(8992): error C2146: syntax error : missing ';' before identifier 'Buffer'
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(11525): error C2059: syntax error : 'constant'
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(11525): error C2238: unexpected token(s) preceding ';'
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(11556): error C2059: syntax error : 'constant'
1>C:Program Files (x86)Microsoft SDKsWindowsv7.0Aincludewinnt.h(11556): error C2238: unexpected token(s) preceding ';'
6 réponses
Vous devez inclure windows.h
plutôt que winnt.h
. Quand vous incluez windows.h
il va, à son tour, include winnt.h
. Vous devez le faire de cette façon pour que les macros nécessaires pour compiler winnt.h
.
Dans ce cas, POINTER_64
est défini à BaseTsd.h
comme ceci:
#define POINTER_64 __ptr64
Mais si vous incluez winnt.h
avant d'inclure windows.h
POINTER_64
n'est pas défini.
si vous utilisez DirectX SDK, essayez de changer les répertoires VC++ pour inclure et lib à rechercher en dernier.
il semble que votre configuration du SDK Windows soit invalide. Cette erreur est causée par le fait que le compilateur est incapable de reconnaître l'instruction 'POINTER_64'. Vous pouvez contourner ce problème en remplaçant 'POINTER_64' par '__ptr64'.
j'ai eu le même problème récemment. Puis j'ai réinstallé la dernière version du SDK Windows et cela a corrigé le problème.
UPDATE @David Heffernan, souligne à juste titre le fait que l'on devrait inclure Windows.h au lieu de winnt.h
essayez de supprimer DirectX SDK si vous en avez un.
ici le bug est accepté: http://connect.microsoft.com/VisualStudio/feedback/details/508204/vc10-0-errors-while-compiling-winnt-h
correction manuelle de la syntaxe dans winnt.h:
typedef void * POINTER_64 PVOID64; => typedef void * POINTER_64, * PVOID64;
si vous utilisez librdkafka, vous obtiendrez cette erreur à chaque fois que "Windows".h" inclus.
Je l'ai corrigé en renommant "librdkafka/include/basetsd.h" avec un nom différent, ou de l'accès cet en-tête de bibliothèque via le sous-chemin!
je pense que l'auteur de cette bibliothèque a fait ce fichier pour traiter la compatibilité de la plate-forme OS. Mais avec le même nom de fichier "basetsd.h " en tant que Windows Core, il vient de confondre Visual Studio.