Erreur LNK2005 : "int k" déjà défini
Lors de la liaison d'une application console Win32 avec plusieurs fichiers C, une erreur "erreur LNK2005 : "int k" (?a@@3HA) déjà défini dans A.obj" peut apparaître. Cette erreur se produit lorsqu'une variable portant le même nom est définie dans plusieurs fichiers.
Dans l'exemple donné, A.cpp et B.cpp définissent tous deux une variable k. Selon la règle d'une définition unique, chaque variable ou fonction globale doit avoir une seule définition. Avoir plusieurs définitions entraîne des ambiguïtés et des erreurs de liaison.
Solutions :
Pour résoudre cette erreur, vous pouvez utiliser les approches suivantes :
Utiliser un espace de noms sans nom (espace de noms anonyme) :
Si la variable k est destinée à être privée pour chaque fichier, utilisez un espace de noms sans nom pour éviter la collision du nom du symbole.
<code class="cpp">namespace { int k; }</code>
Cela isole le symbole k dans chaque fichier, empêchant d'autres fichiers d'y accéder ou de le redéfinir.
Déclarez et définissez une variable dans des fichiers séparés :
Si vous devez partager la variable k dans plusieurs fichiers, utilisez extern pour la déclarer dans le fichier d'en-tête et la définir dans une unité de compilation distincte.
A.h
<code class="cpp">extern int k;</code>
A.cpp
<code class="cpp">#include "A.h" int k = 0;</code>
B.cpp
<code class="cpp">#include "A.h" // Use `k` anywhere in the file</code>
En déclarant k comme extern dans le fichier d'en-tête, d'autres fichiers peuvent y accéder et l'utiliser sans le redéfinir.
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!