Donc, peu importe ce que je semble faire, je ne peux pas éviter d'avoir Dev C++ spew nombreuses erreurs de définition multiples à la suite de moi, y compris le même fichier d'en-tête fichiers de code source dans le même projet. Je préfère fortement éviter d'avoir à vider tout mon code source dans un seul fichier et à n'inclure l'en-tête qu'une seule fois, car cela va rendre mon fichier très long et difficile à gérer.Plusieurs erreurs de définition multiple d'inclure le même en-tête dans plusieurs cpps
Essentiellement, voici ce qui se passe:
#ifndef _myheader_h
#define _myheader_h
typedef struct MYSTRUCT{
int blah;
int blah2; } MYSTRUCT;
MYSTRUCT Job_Grunt;
MYSTRUCT *Grunt = &Job_Grunt;
MYSTRUCT Job_Uruk;
MYSTRUCT *Uruk = &Job_Grunt;
int Other_data[100];
void load_jobs();
#endif
Exemple Cpp fichier (ils à peu près tous ressembler à quelque chose comme ça):
#include "myheader.h"
void load_jobs(){
Grunt->blah = 1;
Grunt->blah2 = 14;
Uruk->blah = 2;
Uruk->blah2 = 15;
return; }
Gardez à l'esprit que j'ai environ 5 fichiers cpp qui comprennent cet en-tête, chacun traitant d'un type de structure différent trouvé dans le fichier d'en-tête. Dans cet exemple, il y avait seulement une structure contenant un couple de membres, quand il y a environ 4-6 structures différentes avec beaucoup plus de membres dans le fichier d'en-tête réel. Tous les fichiers que j'ai inclus dans suivent la même formule que vous voyez dans cet exemple ici.
Maintenant, je comprends que la garde d'en-tête empêche seulement chaque fichier cpp individuel d'inclure le fichier d'en-tête plus d'une fois. Ce qui semble se produire est que lorsque le compilateur lit le comprennent au début de chaque cpp, il définit le fichier d'en-tête une fois de plus, ce qui est à l'origine de cracher des lignes et des lignes de:
Multiple Definition of Uruk, first defined here
Multiple Definition of Job_Uruk, first defined here
Multiple Definition of Grunt, first defined here
Multiple Definition of Job_Grunt, first defined here
Multiple Definition of Other_data, first defined here
I Je vais voir un ensemble de ceci pour à peu près tous les fichiers cpp dans le projet qui comprend l'en-tête. J'ai essayé de déplacer les définitions des variables struct et struct dans les fichiers cpp, mais les autres fichiers cpp ne peuvent pas les voir ou travailler avec eux, ce qui est très important car j'ai besoin de tous les fichiers du projet pour pouvoir travailler avec ces structures.
Mais la partie la plus déroutante au sujet de ce problème, il faut un peu plus d'explications:
La façon dont je suis la mise en place de ces multiples fichiers dans ce projet est identique au livre que je travaille avec, All In One Programmation de jeu par John S. Harbour. J'ai rencontré exactement les mêmes problèmes lorsque j'ai créé les fichiers par exemple des projets dans le livre qui appelaient un en-tête inclus par plusieurs cpps dans le même projet.
Je pourrais les taper, mot à mot du livre, et je veux dire mot à mot ...
et j'obtiendrais la série d'erreurs MD pour chaque cpp dans le projet. Si j'ai chargé l'exemple de projet à partir du CD fourni avec le livre, il serait compilé et fonctionnerait sans problème, bien que les fichiers eux-mêmes, ainsi que les options du projet, soient identiques à ceux que j'avais créés . Si je créais mon propre fichier de projet, et que j'ajoutais simplement les fichiers source et d'en-tête pour le projet exemple à partir du CD, cela aussi compilerait et s'exécuterait, bien que je ne puisse trouver aucune différence entre ceux-ci et moi. J'ai ensuite essayé de créer mon propre fichier de projet, puis de créer les fichiers source et d'en-tête vides et de les ajouter, puis de les copier en les copiant et en les collant à partir des fichiers du CD. à (les mêmes qui avaient travaillé). Et bien sûr, j'obtiendrais la même chose ... des lignes et des lignes de messages d'erreur MD.
Je suis absolument déconcerté.J'ai répété toutes ces méthodes plusieurs fois, et je suis sûr que je ne fais pas de faute de frappe ou que je ne mésestime pas le code. Il semble juste y avoir quelque chose à propos des fichiers premade eux-mêmes; certains paramètres de configuration ou quelque chose d'autre me manque complètement ... ce qui les amènera à compiler correctement alors que les fichiers que je fais ne le seront pas.