2010-12-13 72 views
3

Donc, ma question est de savoir comment corriger une erreur dans le fichier d'en-tête, pour exécuter le programme normalement? Par exemple, j'utilise C++ Builder 2010 et quand winuser.h fichier est inclus, le programme toujours obtenir cette erreur commeComment réparer une erreur de fichier d'en-tête?

Vérification des dépendances de projet ... Compiling Project7.cbproj (configuration de débogage ) [Erreur BCC32] winuser.h (47): E2257, attendu Complet parser contexte File6.cpp (4): #include c: \ fichiers de programme (x86) \ embarcadero \ rad studio \ 7.0 \ include \ winuser.h [BCC32 Erreur ] winuser.h (48): E2257, attendu Contexte complet de l'analyseur

je tente de remplacer ce fichier avec l'installation d'origine par défaut, mais qui ont toujours la même erreur, comment résoudre ce problème?

Répondre

2

Le message est difficile à lire, mais l'erreur réelle est "E2257, attendu" (coma prévu)

De la documentation studio RAD:

A comma was expected in a list of declarations, initializations, or parameters. 

This problem is often caused by a missing syntax element earlier in the file 
or one of its included headers. 

Le message d'erreur vous donne la ligne où il arrivé et vous devriez probablement regarder avant cela. Il y a probablement des '}', ')' ou ';' ou tout autre syntaxe manquante dans votre code juste avant l'erreur (probablement avant l'inclusion du fichier d'en-tête dans votre code). Le message d'erreur complet (vous l'avez tronqué) ou le code réel le rendrait plus facile à repérer.

Il est également possible, même si cela est peu probable, que l'erreur soit dans l'un des en-têtes inclus dans winuser.h.

+0

extern "C" { #endif/* __cplusplus */ #ifndef WINVER #define WINVER 0x0500/* version 5.0 */ #endif/*! * WINVER/ #include #ifndef NOUSER typedef HANDLE HDWP; typedef VOID MENUTEMPLATEA; – raptor

+0

essayez de mettre comme première inclusion. Je parierais pour un conflit de définition de macro entre les en-têtes. – kriss

+0

Je parierais pour certains .... et vous gagnerez :), pour une raison quelconque, quand je inclue le fichier windows.h avant winuser.h fichier c'est bien, mais si faire la même chose juste inverse, cela n'a pas .. .thnx – raptor

4

L'erreur est presque certainement causée par n'importe quel code apparaît avant ligne 4 de File6.cpp. Très probablement, il s'agit d'un autre fichier d'en-tête, auquel cas il est probable que le code qui s'y trouve est mal formé - un point-virgule ou une accolade manquant par exemple. Le moyen le plus rapide de vérifier que winuser.h n'est pas le problème est de changer l'ordre d'inclusion de manière à inclure winuser.h en premier.

Une autre possibilité est que quelque chose dans winuser.h dépende d'un autre en-tête non inclus précédemment ou directement inclus dans winuser.h. La plupart des en-têtes API Win32 sont inclus par windows.h, et il est généralement conseillé d'inclure windows, h plutôt que l'un des its children.

+0

donc si je vous comprends bien, vous dites que même si je n'inclue pas le fichier winuser.h (mais avec windows.h inclus seulement) qui peut utiliser toute la fonction qui est stockée dans winuser.h sans aucun problème ? – raptor

+0

@raptor: oui, habituellement est assez et comprend kriss

+0

thnx ... il est bon de savoir que ... :) – raptor