Maison > développement back-end > C++ > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-02 11:16:02
original
616 Les gens l'ont consulté

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;
Copier après la connexion

Lors de la compilation, l'erreur survient :

Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
Copier après la connexion

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;
}
Copier après la connexion

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;
Copier après la connexion

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

#include "A.h"
int k = 0;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal