Problème avec les templates de class
Bonjour, je suis en train de développer une petite application "test" pour ma futur lib de maths et je rencontre un problème bien étrange. J'ai vérifié dans mon bouquin, mais du point de vue code, je ne vois aucune erreur. Je suis parti sur le net idem.
Voilà le code :
main.cpp (basique) :
Code:
1 2 3 4 5 6 7 8
|
#include "Point2d.hpp"
int main(void)
{
izk::Point2d<int> pt(2, 3);
return 0;
} |
Point2d.hpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#ifndef POINT2D_HPP
#define POINT2D_HPP
namespace izk
{
template <typename T> class Point2d
{
public:
Point2d();
Point2d(T x, T y);
T getX() const;
T getY() const;
void setX(T x);
void setY(T y);
void setPosition(T x, T y);
private:
T m_x;
T m_y;
};
}
#endif // POINT2D_H |
Point2d.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
#include "Point2d.hpp"
namespace izk
{
template <typename T> Point2d<T>::Point2d()
{
}
template <typename T> Point2d<T>::Point2d(T x, T y)
{
m_x = x;
m_y = y;
}
template <typename T> T Point2d<T>::getX() const
{
return m_x;
}
template <typename T> T Point2d<T>::getY() const
{
return m_y;
}
template <typename T> void Point2d<T>::setX(T x)
{
m_x = x;
}
template <typename T> void Point2d<T>::setY(T y)
{
m_y = y;
}
template <typename T> void Point2d<T>::setPosition(T x, T y)
{
m_x = x;
m_y = y;
}
} |
J'utilise la version finale de code::blocks (enfin celle sortie il n'y a pas longtemps et qui est une version stable). Je suis sous Linux (rien à voir avec le problème mais bon).
Voilà l'erreur retournée :
Citation:
main.cpp.text+0x28)||undefined reference to `izk::oint2d<int>::point2d(int, int)'|
Dois-je définir le comportement du constructeur si c'est un int alors que j'ai dis que ca pouvait l'être (via le système de templates),
si oui alors comme dirai Jean Pierre Coff : "C'est de la merde !" :mouarf:
Merci d'avance :)
Ps:
Je suis parti voir des sources d'une lib (la SFML) et quand je regarde je vois :
Vector2.hpp et Vector2.Inl (qui plus est, je l'ouvre et aucune référence à Vector2.hpp n'est tapé donc y a pas son inclusion) et pas de Vector2.cpp
A quoi cela correspond ?