Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que j'obtiens l'erreur « Erreur LNK2005 : déjà défini ? » lorsque je définis la même variable dans plusieurs fichiers C ?

Pourquoi est-ce que j'obtiens l'erreur « Erreur LNK2005 : déjà défini ? » lorsque je définis la même variable dans plusieurs fichiers C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 01:43:29766parcourir

Why am I getting the

Erreur : "erreur LNK2005 : déjà définie ?"

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.

Solutions

Utilisation d'un espace de noms sans nom

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.

Utilisation de la déclaration externe

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!

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