Erreur de définition multiple : une solution aux définitions conflictuelles
En C, lors de la définition de fonctions ou de classes dans les en-têtes et de leur implémentation dans les fichiers source, les développeurs peuvent rencontrer l’erreur « définition multiple ». Cette erreur survient lorsque plusieurs unités de traduction (fichiers sources) contiennent des définitions pour le même identifiant.
Causes de définitions multiples
L'erreur « définition multiple » se produit lorsque les fichiers d'en-tête contenant des définitions sont inclus dans plusieurs unités de traduction. Cela peut se produire lorsque :
Comprendre l'erreur
Considérez l'exemple de code fourni :
// complex.h class Complex { public: friend std::ostream& operator<<(std::ostream&, const Complex&); }; // complex.cpp std::ostream& operator<<(std::ostream&, const Complex&);
Dans cet exemple, la définition de l'opérateur << ; est dans complex.h au lieu de complex.cpp. Cela peut conduire à une erreur de définition multiple car main.cpp et complex.cpp tenteront de définir le << opérateur pour la classe Complex.
Solutions aux définitions multiples
Les solutions à l'erreur de définition multiple sont :
L'utilisation du mot-clé en ligne ou le déplacement de la définition vers le fichier source sont les solutions préférées pour éviter l'erreur de définition multiple.
Différence dans la gestion de real() et <<
Dans l'exemple de code, la fonction real() est déclarée dans complex.h, mais n'est pas définie. C'est pourquoi le compilateur ne signale pas d'erreur de définition multiple. Les fonctions membres déclarées dans les déclarations de classe sont implicitement intégrées, ce qui signifie que leurs définitions sont insérées dans toutes les unités de traduction qui incluent l'en-tête. Ce n'est pas le cas pour l'opérateur << fonction, qui est définie dans complex.h.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!