Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

undefined reference sur des methodes dans un template

2 réponses
Avatar
Pierre THIERRY
Hello,

j'ai un souci avec un objet template, dont le constructeur et le
destructeur appellent chacun une méthode. Mais le linker me renvoit une
erreur « undefined reference ». Voici un code qui reproduit l'erreur, je
compile avec GCC 4.0.3 :

===================
Fichier objects.cpp
===================
#include "objects.hpp"

template<typename T> void Foo<T>::bar()
{
m_foo++;
}

template<typename T> void Foo<T>::baz()
{
m_foo--;
}
===================
Fichier objects.hpp
===================
template<typename T> class Foo
{
public:
Foo(T init) : m_foo(init)
{
bar();
}

~Foo()
{
baz();
}

T m_foo;

void bar();
void baz();
};
===================
Fichier obj_run.cpp
===================
#include "objects.hpp"

int main()
{
Foo<signed int> my_foo(1);
}

Compiler les .o marche bien, mais "g++ obj_run.o objects.o -o obj_run"
me renvoit ensuite l'erreur... Je ne suis pas sûr de comprendre.

Incompréhensiblement,
Nowhere man
--
nowhere.man@levallois.eu.org
OpenPGP 0xD9D50D8A

2 réponses

Avatar
David MAREC
Bonjour,



================== > Fichier objects.cpp
================== > #include "objects.hpp"

template<typename T> void Foo<T>::bar()
{
m_foo++;
}

template<typename T> void Foo<T>::baz()
{
m_foo--;
}



Lorsque l'on décrit des patrons de classes, il faut faire l'inverse.

C'est le ".hpp" qui inclue le code "cpp".

Ajoutez simplement les lignes de code associées au template dans le
".hpp" le décrivant.



--
http://david.marec.free.fr

Avatar
Pierre THIERRY
Le Tue, 13 Dec 2005 15:26:51 +0100, Pierre THIERRY a écrit :
j'ai un souci avec un objet template, dont le constructeur et le
destructeur appellent chacun une méthode. Mais le linker me renvoit
une erreur « undefined reference ».


Désolé, c'était évident. J'ai pigé ce qui n'allait pas en y repensant
sur le chemin de la fac. Le vent frais, sûrement...

Brièvement,
Nowhere man
--

OpenPGP 0xD9D50D8A