1 votes

voir la définition précédente de "un symbole

Tout en programmant en c++, La plupart du temps, j'obtiens "un symbole" a déjà été défini. voir la définition précédente de "some symbol" (un symbole)

Je pense que cela est dû à un mauvais ordre d'inclusion des fichiers d'en-tête.

Comment puis-je trouver toutes les définitions de "un symbole" ?

Merci d'avance, Uday

EDIT :

J'utilise visual studio Je me souviens d'une commande du type dumpbin /exports (je ne me souviens pas exactement) pour obtenir toutes les définitions.

6voto

Cela est généralement dû à un certain nombre de problèmes courants :

  • vous redéfinissez le même symbole
  • vous incluez un fichier d'en-tête plusieurs fois et il n'a pas de gardes d'inclusion
  • vous déclarez de manière incorrecte un type incompatible et vous incluez ensuite

Je commencerais par essayer de réparer le second. Assurez-vous que tous les en-têtes ont des gardes d'inclusion de sorte que si vous les incluez à partir de différents endroits, il n'essaiera pas de redéfinir les symboles :

#ifndef HEADER_FILE_NAME_GUARD // or something alike
#define HEADER_FILE_NAME_GUARD
// rest of file
#endif

Si vous avez besoin d'ordonner vos inclusions, vous rencontrerez des problèmes plus tard, assurez-vous que vous pouvez et que vous incluez toutes vos dépendances à tous les endroits. (Ou déclarez à l'avance si vous le pouvez)

4voto

sharptooth Points 93379

La recherche en texte intégral est la technique la plus efficace et la plus multiplateforme et multi-environnement.

2voto

Jim Buck Points 10839

Si vous utilisez Visual Studio avec Assistance visuelle installée, alt-G affichera une liste de tous les endroits où quelque chose est défini.

2voto

Si vous utilisez Visual Studio avec Visual Assist, il est préférable d'appuyer sur Alt+X puis sur D pour voir toutes les références au symbole

2voto

MSalters Points 74024

La traduction du C++ en un exécutable se fait en deux étapes. Lors de la première étape, le compilateur travaille de manière linéaire sur les données d'entrée (généralement des fichiers .cpp et les en-têtes qu'ils incluent). À l'étape 2, l'éditeur de liens combine les résultats de l'étape 1.

D'après votre description de "symbole défini avant", j'en conclus que le problème doit se produire dans un fichier .cpp, car ceux-ci sont traités de manière linéaire. dumpbin /exports fonctionne sur la sortie de l'étape 1, que vous n'aurez probablement pas. L'inclusion de l'en-tête pourrait être le coupable, étant donné qu'il s'agit d'une phase précoce de la compilation. Vous voulez l'entrée prétraitée. IIRC, vous pouvez l'obtenir avec le commutateur /EP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X