Bonjour,

J'écris un programme dans lequel j'ai une classe image template qui contient un pointeur vers un vecteur de T. Je voudrais surcharger l’opérateur [] mais je n'arrive pas à compiler.


classe Image
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
 
template<typename T>
class Image
{
public:
    Image(vector<T> &data, size_t width, size_t height, size_t depth);
    ~Image();
 
    vector<size_t> getSize() const {return m_size;}
 
     T& operator[](size_t const index) {return this->m_data[index];}
     T  operator[](size_t const index) const {return this->m_data[index];}
 
private:
    vector<T> *m_data;
    vector<size_t> m_size;
Je fais appel à l'opérateur [] dans une autre classe lorsque je veux lire/modifier la valeur:

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
 
template<typename T>
bool ConvFilter<T>::applyTo(Image::Image<T>& dest, const Image::Image<T> &src)
{
    if (dest.getSize() != src.getSize())
    {
        cerr << "input and output Images have not the same size" << endl;
        return false;
    }
 
    vector<size_t> size = src.getSize();
 
    for (size_t k=0,index=0; k<size[2]; ++k)
        for ( size_t j=0; j<size[1]; ++j )
            for ( size_t i=0; i<size[0]; ++i, ++index)
                cout << src[index] << endl;
Lors de l'appel à l'opérateur ligne16, ça va chercher l'opérateur ligne 12 de Image et ça me met:

Y:\programs\normalisationPIXEbySTIM\src\Image\Image.hpp:23(=ligne 12): erreur : cannot convert 'std::vector<float>' to 'float' in return
Pourtant il me semble que tel que je l'ai écris ma surcharge renvoie un Tet pas un vecto<T> non?