2009-09-06 16 views
0

J'ai un programme que je veux implémenter la classe de bouton. J'ai déclaré toutes mes variables dans button.h et défini toutes les méthodes dans button.cpp et j'appelle ces fonctions dans WINMAIN l'erreur suivante apparaît.Erreur de lienLNK2005 dans VC++

keylogger.obj: erreur LNK2005: "struct HBITMAP__ * hOldBmp" déjà défini dans Button.obj

L'erreur est multiple pour defination hOldBmp mais il est défini que dans (hOldBmp @@ 3PAUHBITMAP __ @@ A?) button.h

Répondre

0

"Seulement défini dans button.h" est exactement votre problème. Sauf si vous l'avez déclaré comme extern et placez la définition dans un fichier source C++ (pas un fichier d'en-tête), chaque unité de traduction aura sa propre définition de la variable.

0

Cela ressemble à une erreur courante: vous incluez l'implémentation de ce pointeur hOldBmp à partir de deux fichiers .obj, donc à partir de deux fichiers cpp. Donc les deux fichiers obj contiennent du code pour implémenter ce pointeur. L'éditeur de liens ne peut pas décider quelle implémentation utiliser dans le binaire final. Solution: laissez uniquement la déclaration dans le fichier d'en-tête. Vous pouvez le déclarer extern ou en faire une variable membre static de la classe de boutons. Mettez la définition dans le fichier cpp.