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 ';'
10
demandé sur John Snow 2012-03-29 14:32:57

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.hPOINTER_64 n'est pas défini.

10
répondu David Heffernan 2012-03-29 10:52:51

si vous utilisez DirectX SDK, essayez de changer les répertoires VC++ pour inclure et lib à rechercher en dernier.

7
répondu james82345 2014-04-15 15:01:11

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

2
répondu Igor Chornous 2012-03-29 10:48:44

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

2
répondu Serov Danil 2012-10-24 15:05:34

correction manuelle de la syntaxe dans winnt.h:

typedef void * POINTER_64 PVOID64; => typedef void * POINTER_64, * PVOID64;
1
répondu Andrey Rakitin 2016-10-10 20:37:17

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.

0
répondu Val 2017-08-02 02:54:46