Probleme de definition multiple

Probleme de definition multiple

par Lucas Clément Emmanuel Marsy,
Number of replies: 3

Bonjour,

Dans notre module noeud nous déclarons 2 namespace "Ensemble_noeuds" et "critères" et lors de l'utilisation de la commande make dans le terminal, il est indiqué qu'il y a une définition multiple pour chaque fonction contenue dans le namespace "critere" ainsi que pour le tableau de pointeurs déclaré dans le namespace "Ensemble_noeuds". Il est indiqué qu'il y a redéfinition de ces éléments dans les fichiers objet de ville et projet alors que ces 2 modules n'utilisent même pas de fonction contenue dans les namespace de noeud. Auriez-vous une idée sur la cause de ce problème?

In reply to Lucas Clément Emmanuel Marsy

Re: Probleme de definition multiple

par Aurélien Bloch,

Salut,

Vérifiez si les déclarations sont faites dans le header ou dans le fichier source.
Sinon peut-être que l'erreur exacte du compilateur nous donnerait une idée plus précise.

Aurelien


In reply to Aurélien Bloch

Re: Probleme de definition multiple

par Lucas Clément Emmanuel Marsy,

Le namespace "Ensemble de noeuds" est déclaré dans le fichier source, et "critères" dans le header. Comme indiqué précédemment, aucune fonction ou instance à l'intérieur de ces namespaces n'est utilisée autrepart que dans le module noeud. Ci-joint un screenshot du problème indiqué par le terminal.

Attachment Screenshot from 2020-04-27 13-50-45.png
In reply to Lucas Clément Emmanuel Marsy

Re: Probleme de definition multiple

par Ronan Boulic,

Si le namespace critère est dans un header et qu'il définit des variables alors vous créez des variables globales (de manière incorrecte détectée par le compilateur) quand le header est inclus dans d'autres modules.

Comment résoudre ce problème:

- ne pas avoir de déclaration de variables dans un header car cela en fait des variable globales (voir aussi un échange à propos de variables static qui ne doivent pas être dans un header également)

- ces variables critères devraient être des attributs de Ville et la communication avec noeud doit se faire par passage de paramètre (par référence) à des fonctions qui travaillent dans le module noeud pour les calculer.

- si vraiment il vous faut des variables "globales au module noeud" alors mettez-les dans le unnamed namespace du module noeud.