Dans votre application console, vous avez rencontré une erreur inattendue lors de la compilation des fichiers A.cpp et B.cpp . Les deux fichiers contiennent le code suivant :
#include "stdafx.h" int k;
Cependant, le processus de compilation génère une erreur :
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
Cette erreur provient de la violation de la « règle d'une définition ». En C , chaque variable, fonction et objet ne peut être défini qu'une seule fois. Dans votre cas, vous avez défini la variable "k" dans A.cpp et B.cpp.
Si vous le souhaitez pour utiliser la même variable nommée dans les deux fichiers, vous pouvez utiliser un espace de noms sans nom (espace de noms anonyme) pour éviter le conflit.
namespace { int k; }
En encapsulant "k" dans un espace de noms, vous limitez efficacement sa portée au fichiers respectifs, évitant ainsi l'erreur de définition.
Si vous avez l'intention de partager la variable "k" sur plusieurs fichiers, vous pouvez utiliser la technique de déclaration et de définition externes :
A.h (fichier d'en-tête)
extern int k;
A.cpp
#include "A.h" int k = 0;
B.cpp
#include "A.h" // Use 'k' variable as needed
Dans ce scénario, vous déclarez une variable comme externe dans A.h et la définissez dans A.cpp. Le fichier B.cpp n'a besoin que d'inclure A.h pour accéder à la variable, évitant ainsi le conflit de définition.
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!