la bibliothèque standard sont déjà définies dans la lib, provoquant l'erreur de l'éditeur de liens
Pas sûr de ce que je fais mal ici, mais disons que j'ai:
foo.h
class foo
{
public:
int Get10(std::wstring);
};
foo.cpp
int foo::Get10(std::wstring dir)
{
return 10;
};
Et je le compiler comme une lib, si je comprend que lib dans un autre projet avec l'en-tête (foo.h) et atttempt de faire appel à une instance de foo:
foo f;
f.Get10(L"ABC");
Je reçois un éditeur de liens d'erreur disant:
Erreur 1 error LNK2005: "public: __thiscall
std::_Container_base12::~_Container_base12(void)"
(??1_Container_base12@std@@QAE@XZ) déjà défini dans
foo.lib(foo.obj) C:\foo\msvcprtd.lib(MSVCP100D.dll) footest
Des idées pourquoi cela se produit?
Avez-vous essayez d'ajouter un point-virgule
ouaip c'est là, dans le fichier source haha, mon mauvais pour en sortir de ce que j'ai mis ici.
;
après la définition de la classe?ouaip c'est là, dans le fichier source haha, mon mauvais pour en sortir de ce que j'ai mis ici.
OriginalL'auteur tweetypi | 2011-12-14
Vous devez vous connecter pour publier un commentaire.
De ce que je peux voir, ce message d'erreur signifie que vous essayez d'inclure MSVC bibliothèque d'exécution de deux fois. Cela pourrait être dû à la suite de la compilation de la
foo.lib
avec la bibliothèque d'Exécution de l'option: "multithread (/MT)" et le projet de test avec l'option: "DLL multithread (/MD)" par exemple.Vérifiez les options d'Exécution sous "Propriétés du Projet" ==> "C/C++" ==> "Génération de Code" pour les deux projets, et assurez-vous qu'ils sont les mêmes pour les deux projets.
J'ai eu le même problème avant, donc je savais ce qui se passe lorsque vous avez affiché l'erreur 🙂
Cette autre question est relative: stackoverflow.com/questions/4917592/...
L'homme parfois C++ messages d'erreur souffler mon esprit à l'ambiguïté qu'ils sont. C'est pourquoi j'utilise C# pour mon code de base et C++ pour les composants.
J'ai ces paramètres et de l'erreur. Mais comment puis-je modifier dans le Visual Studio GUI?
OriginalL'auteur ksming
Êtes-vous y compris foo.h en tout .h les fichiers? Vous devrez peut-être ajouter un en-tête de gardes à assurez-vous de ne pas définir la classe plus d'une fois par fichier:
Voir aussi: http://en.wikipedia.org/wiki/Include_guard
Pouvez-vous inclure l'ensemble de la source de toutes les fonctions que vous utilisez et de la ligne de commande?
L'éditeur de liens erreurs sont passé de façon tout fichier d'en-tête des problèmes ...
OriginalL'auteur sligocki