81 votes

erreur LNK2005, déjà définie ?

J'ai 2 fichiers, A.cpp et B.cpp, dans une application console Win32.

Les deux fichiers ne contiennent que les 2 lignes de code suivantes :

 #include "stdafx.h"
int k;

Lors de la compilation, il produit l'erreur

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

Je ne comprends pas ce qui se passe.

Quelqu'un pourrait-il me l'expliquer?

88voto

Michael Haephrati Points 145

Dans les paramètres du projet, ajoutez /FORCE:MULTIPLE aux options de ligne de commande de l'éditeur de liens.

À partir de MSDN : « Utilisez /FORCE:MULTIPLE pour créer un fichier de sortie, que LINK trouve ou non plusieurs définitions pour un symbole. »

6voto

Steve Howard Points 2944

En supposant que vous vouliez que 'k' soit une valeur différente dans différents fichiers .cpp (donc en le déclarant deux fois), essayez de changer les deux fichiers en

 namespace {
    int k;
}

Cela garantit que le nom « k » identifie de manière unique « k » dans toutes les unités de traduction. L'ancienne version static int k; est obsolète.

Si vous voulez qu'ils pointent vers la même valeur, remplacez-en un par extern int k; .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X