Spécialisation de template
Bonsoir,
Je bosse sur une classe lisant et écrivant des images en niveaux de gris et couleurs.
J'ai donc commencé à la coder en template pour me faciliter la tâche :)
J'essaye de faire une spécialisation sur une fonction membre mais je reçoit l'erreur :
Citation:
Image.tpp|52|multiple definition of `Image<unsigned char>::writePGM(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'|
Il me semble que ça se passe au niveau de l'édition des liens.
Voici le code :
Image.h :
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
|
typedef unsigned char ubyte;
typedef unsigned short ushort;
typedef unsigned int uint;
#include <stdexcept>
#include <iostream>
#include <fstream>
#ifndef IMAGE_H
#define IMAGE_H
template <typename T>
class Image {
ushort m_width, m_height;
T *m_array;
Image();
public:
Image(ushort, ushort);
Image(const Image&);
~Image();
void printImage();
void writePGM(std::ostream&, std::string);
static Image<ubyte>* readPGM(std::istream&);
};
#include "../src/Image.tpp"
#endif |
Code.tpp:
Code:
1 2 3 4 5 6 7 8 9
| template <>
void Image<ubyte>::writePGM(std::ostream& os, std::string name) {
//écriture de l'image
}
template <>
Image<ubyte>* Image<ubyte>::readPGM(std::istream& is) {
//lecture de l'image
} |
J'ai pourtant cherché mais je retrouve cette syntaxe à chaque fois, j'ai du louper un truc...
Merci d'avance :D