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 :

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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