Attendu unqualified-id de l'avant constante numérique pour la définition d'un certain nombre
Je suis novice en C++, donc je ne sais pas ce qu'ils veulent dire avec cette erreur dans un phidget-exemple de code:
Principal.rpc:8:16: erreur: attendu unqualified-id de l'avant constante numérique
//verander de volgende informatie naar de informatie voor jouw database
#define dserver "oege.ie.hva.nl"
#define duser "username"
#define dpassword "password"
#define ddatabase "databasename"
#define homeid 1234 //line 8
Est-il une erreur de syntaxe? Ou quelque chose d'autre? J'ai utiliser des #define au lieu de int.
EDIT: ajout du journal d'erreur..
erreur complet-journal: http://pastebin.com/3vtbzmXD
Plein main.cpp code: http://pastebin.com/SDTz8vni
- Vous aurez besoin de montrer plus de
Main.cpp
. - préférez
const int homeid = 1234;
surdefine
. - En retrait directives sont parfaitement valides.
- Je suis curieux de savoir ce qui est sur les lignes 1..7
- Vous pensez peut-être de la pré-norme compilateurs C, qui n'a pas toujours le soutenir, mais le premier C standard et la première norme C++ à la fois le permettent.
- Le principal est de 370 ligne de code, je ne sais pas ce que vous en montrer plus. Il y a beaucoup de Bibliothèques incluses et MySQL données de connexion défini à la ligne 3-15
- ajout de ces lignes...
- Maintenant, vous avez juste besoin de fournir la version complète et non censurée de la sortie d'erreur.
- ouais, il n'y a rien de mal à cela, à tous les le voir en direct. Je soupçonne que nous n'obtenons pas l'ensemble, histoire choquante. Je suis d'accord avec a ci-dessous.
- J'ai ajouté le plein d'erreur du journal..
- J'ai ajouté le plein journal des erreurs
- Hvd est certainement correcte. Vous êtes essentiellement écrit: string 1234; ce qui n'est évidemment pas valable en C++.
- Ajouter le journal d'erreur dans la question, non pas comme une pièce jointe; que le lien va mourir par la suite
- Rappelez-vous que le préprocesseur remplace simplement les macros partout où il les trouve. Donc, en ayant par exemple une déclaration
string homeid;
entraînerastring 1234;
après prétraitement, ce qui n'est pas valide.
Vous devez vous connecter pour publier un commentaire.
L'erreur totale est
Vous essayez de déclarer une variable avec le même nom qu'une macro, mais qui ne peut pas être fait. Le préprocesseur a déjà piétiné sur le programme, les transformant en
string 1234;
, ce qui n'est pas une déclaration valide. Le préprocesseur n'a pas connaissance de la structure du programme, et les macros ne suivent pas la langue du champ d'application des règles.Si possible, utilisez des fonctionnalités de langage comme des constantes et des fonctions inline plutôt que de macros. Dans ce cas, vous pouvez utiliser
Ce sera étendue dans l'espace de noms global, et peut en toute sécurité être caché par quelque chose avec le même nom dans un champ d'application plus restreint. Même lorsqu'elle est cachée, elle est toujours disponible comme
::homeid
.Lorsque vous en avez vraiment besoin d'une macro, il est sage de suivre la convention d'utilisation
SHOUTY_CAPS
pour les macros. Ainsi que d'attirer l'attention sur les dangers potentiels et les wierdnesses associés à l'utilisation des macros, il ne sera pas en conflit avec n'importe quel nom à l'aide d'autres capitalisation.=
entre le nom de la variable et de l'initialiser.#undef
de s'en débarrasser...bizarre...Que la ligne est fine.
Ce qui est le plus probable qui se passe est que le compilateur se plaint pas sur la définition de la macro elle-même, mais sur la utilisation de la macro. Exemple:
Au moment de la compilation avec GCC, j'obtiens:
Cela vous indique que la constante numérique invitant la plainte est partie de la définition de la macro, mais aussi que cette macro est utilisé (dans ce cas, apparemment par accident) sur la ligne 3. Jetez un oeil à où la macro-expansion est à venir à partir de votre code.