Erreur de link C++

younes008 -  
younes008 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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");
}

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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 .
1
younes008 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour ta réponse claire et rapide. ça marche à présent.
0