Définitions multiples de 'wat' dans un projet C
Le code donné se compose de quatre fichiers : FileA.cpp, FileA.h, FileB.cpp et FileB.h. Une fois compilé, il rencontre une erreur indiquant "définition multiple de `wat'".
FileB.h définit une variable entière nommée 'wat' comme suit :
#ifndef FILEB_H_ #define FILEB_H_ int wat; void world(); #endif /* FILEB_H_ */
Depuis ce fichier d'en-tête est inclus dans FileA.cpp et FileB.cpp, le compilateur détecte que « wat » est défini plusieurs fois. Cela se produit car la macro FILEB_H_ n'est pas correctement définie dans tous les fichiers d'en-tête.
Pour résoudre ce problème, les fichiers d'en-tête doivent être modifiés comme suit :
FichierA.h :
#ifndef FILEA_H_ #define FILEA_H_ #include "FileB.h" void hello(); #endif /* FILEA_H_ */
FichierB.h :
#ifndef FILEB_H_ #define FILEB_H_ extern int wat; // Declare 'wat' as external void world(); #endif /* FILEB_H_ */
FichierB .cpp :
#include "FileB.h" int wat = 0; // Define 'wat' with its initial value void world() { // More code }
En utilisant 'extern' dans FileB.h, nous informons le compilateur que 'wat' est défini ailleurs et qu'il ne doit pas rechercher sa définition dans le fichier courant. La définition réelle de « wat » est ensuite fournie dans FileB.cpp, évitant ainsi l'erreur de définition multiple.
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!