Les Allergies
Alimentaires
Posez votre question Signaler

Erreur de link C++

younes008 - Dernière réponse le 14 janv. 2010 à 13:31
Bonjour,
Un bout de code très simple et que je n'arrive pas à compiler sous visual C++ Express.
Pourriez vous m'éclairer?
en vous remerciant d'avance.
Voici l'erreur que le compilateur me renvoie.
1>main.obj : error LNK2019: symbole externe non résolu "public: virtual __thiscall SimplePropertySet<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,double>::~SimplePropertySet<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,double>(void)" (??1?$SimplePropertySet@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@N@@UAE@XZ) référencé dans la fonction _main
1>main.obj : error LNK2019: symbole externe non résolu "public: __thiscall SimplePropertySet<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,double>::SimplePropertySet<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,double>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$SimplePropertySet@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@N@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) référencé dans la fonction _main
1>C:\Users\younes\Documents\Visual Studio 2008\Projects\testProperty\Debug\testProperty.exe : fatal error LNK1120: 2 externes non résolus

SimplePropertySet.hpp
#include <list>
#include <string>
#include <set>

using namespace std;


template <class N, class V> class SimplePropertySet
{
private:

	N nam;		// The name of the set


public:
	// Constructors and destructor
	SimplePropertySet();		// Default constructor
	SimplePropertySet(const N& name);		// Named property set
	SimplePropertySet(const SimplePropertySet<N,V>& source);	// Copy constructor

	virtual ~SimplePropertySet();	// Destructor
};

SimplePropertySet.cpp
#include "SimplePropertySet.hpp"
template <class N, class V>
SimplePropertySet<N,V>::SimplePropertySet()
{ // Default constructor

	nam = N();
}

template <class N, class V>
SimplePropertySet<N,V>::SimplePropertySet(const N& name)
{ // Named property set

	nam = name;
}

template <class N, class V>
SimplePropertySet<N,V>::SimplePropertySet(const SimplePropertySet<N,V>& source)
{ // Copy constructor
	
	nam = source.nam;
}


template <class N, class V>
SimplePropertySet<N,V>::~SimplePropertySet()
{ // Destructor


}

Main.cpp
#include "SimplePropertySet.hpp"
#include <iostream>
using namespace std;
int main()
{
	SimplePropertySet<string, double> input("Strike");
}

Lire la suite 

Erreur de link C++ »

2 réponses
Réponse
+0
moins plus
Les templates ne doivent pas être séparé en .h et .cpp, il faut tout inclure. Les templates instancie la bonne version à la compilation, il faut donc que la définition se trouve dans l'unité de compilation.
Copie simplement de le contenue de SimplePropertySet.cpp dans SimplePropertySet.hpp .
Ajouter un commentaire
Réponse
+0
moins plus
Merci pour ta réponse claire et rapide. ça marche à présent.
Ajouter un commentaire
Ce document intitulé « erreur de link C++ » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?