Maison >développement back-end >C++ >Pourquoi mon code C produit-il une erreur « Définition multiple de « wat » » et comment puis-je la corriger ?

Pourquoi mon code C produit-il une erreur « Définition multiple de « wat » » et comment puis-je la corriger ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-04 03:56:101015parcourir

Why Does My C   Code Produce a

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn