Bonjour
J'écris une classe qui ressemble à des vecteurs et des matrices pour faire des opérations. Je la définis avec un template
template <typename T>
pour pouvoir choisir mon type ensuite (int, float, etc).
Ca compile bien, mais j'ai un problème lors de l'édition de lien.
Dans mon ino, qui appelle la classe, je définis :
Array<int16_t> a({1, 2, 3});
et j'obtiens ces messages d'erreur :
Arduino : 1.8.15 (Windows 10), Carte : "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"
sketch\sketch_dec06a.ino.cpp.o:(.literal._Z5setupv+0x18): undefined reference to `Array::Array(std::vector<short, std::allocator >)'
sketch\sketch_dec06a.ino.cpp.o:(.literal._Z5setupv+0x1c): undefined reference to `Array::~Array()'
sketch\sketch_dec06a.ino.cpp.o: In function `setup()':
C:\Users\Documents\Arduino\sketch_dec06a/sketch_dec06a.ino:6: undefined reference to `Array::Array(std::vector<short, std::allocator >)'
C:\Users\Documents\Arduino\sketch_dec06a/sketch_dec06a.ino:6: undefined reference to `Array::~Array()'
collect2.exe: error: ld returned 1 exit status
exit status 1
Donc, il ne trouve pas le constructeur et le destructeur.
Pourtant, je les ai bien déclarés :
Fichier .h
template <typename T>
class Array {
public:
Array( int = 10 ); // default constructor
Array( const Array & ); // copy constructor
Array( const std::vector<T> ); // init from vector
~Array(); // destructor
et fichier cpp:
// Init from vector
template <typename T>
Array<T>::Array( const std::vector<T> init ) : size( init.size() )
{
ptr = new T[ size ]; // create space for array
assert( ptr != 0 ); // terminate if memory not allocated
++arrayCount; // count one more object
for ( int i = 0; i < size; i++ )
ptr[ i ] = init[ i ]; // copy init into object
}
// Destructor for class Array
template <typename T>
Array<T>::~Array()
{
delete [] ptr; // reclaim space for array
--arrayCount; // one fewer object
}
La compilation se passe bien, pourquoi l'éditeur de liens ne trouve t-il pas mes fonctions ?