Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que j'obtiens « erreur LNK2005 : déjà définie » dans mon projet C ?

Pourquoi est-ce que j'obtiens « erreur LNK2005 : déjà définie » dans mon projet C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 11:16:02552parcourir

Why am I Getting

Dévoiler le mystère de l'erreur LNK2005 : comprendre plusieurs définitions

Lorsque vous travaillez avec plusieurs fichiers C au sein d'un projet, l'"erreur LNK2005, déjà "défini" peut être un obstacle déroutant. Cette erreur signifie que plusieurs définitions de la même variable ou fonction existent dans le projet. Pour approfondir ce problème, examinons un exemple spécifique.

Le scénario problématique

Considérons une application console Win32 comprenant deux fichiers : A.cpp et B.cpp. Les deux fichiers contiennent uniquement les éléments suivants :

#include "stdafx.h"
int k;

Lors de la compilation, l'erreur survient :

Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj

La racine du problème : violation de la règle d'une définition

Le principe fondamental qui sous-tend cette erreur est la « règle d'une définition » (ODR) appliquée en C . Cette règle stipule que toute variable ou fonction ne peut avoir qu'une seule définition définitive tout au long du projet. Dans ce scénario, A.cpp et B.cpp tentent de définir la même variable « k », violant ainsi l'ODR. En conséquence, l'éditeur de liens rencontre un conflit et déclenche le message d'erreur.

Résoudre le problème

Pour résoudre cette erreur, vous pouvez utiliser deux approches principales :

Approche 1 : Utiliser des espaces de noms sans nom

Si votre intention est de Si vous partagez la même variable sur plusieurs unités de traduction (c'est-à-dire des fichiers cpp), envisagez d'utiliser un espace de noms sans nom. Un espace de noms sans nom encapsule la variable dans sa propre portée, la rendant inaccessible en dehors de cette portée.

namespace {
    int k;
}

Approche 2 : Variables externes

Alternativement, si vous en avez besoin partagez une variable sur plusieurs fichiers mais souhaitez conserver son accessibilité au code externe, utilisez le mot-clé « extern ». Cette approche consiste à déclarer la variable dans un fichier d'en-tête (par exemple, A.h):

extern int k;

et à la définir ensuite dans l'un des fichiers d'implémentation (par exemple, A.cpp):

#include "A.h"
int k = 0;

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