#1 Le 12/10/2013, à 07:41
- boutor
Cpp classe et opérateur dans la classe
Bonjour à tous,
J'ai créé une classe dans laquelle je défini l'opérateur (int, int), qui me renvoit la valeur sur ma grille de valeur.
J'aimerais utiliser cet opérateur dans une autre fonction. L'appel à this ou *this ne fonctionne pas :
erreur: ‘this’ cannot be used as a function|
Le header :
#ifndef GRID_H
#define GRID_H
#include <vector>
template <class T>
class grid
{
public:
grid();
grid(int, int);
virtual ~grid();
grid(const grid& other);
void set_value(const std::vector<T> &);
std::vector<T> dx();
T operator()( int , int ) const;
T & operator()( int , int );
protected:
private:
std::vector<T> _value;
int _nx, _ny;
};
#endif // GRID_H
Le cpp avec la fonction qui plante en premier :
#include "grid.h"
template <class T>
std::vector<T> grid<T>::dx()
{
std::vector<T> ret;
for(int i = 0; i < _nx; ++i) {
for(int j = 0; j < _ny; ++j) {
ret.push_back( *this(i+1,j) - *this(i-1,j) );
}
}
return ret;
}
template <class T>
T grid<T>::operator()(int nx, int ny) const
{
return _value[(unsigned int)nx*_ny + (unsigned int)ny];
}
template <class T>
T & grid<T>::operator()( int nx, int ny)
{
return _value[(unsigned int)nx*_ny + (unsigned int)ny];
}
template <class T>
grid<T>::grid()
{
//ctor
}
template <class T>
grid<T>::grid(int nx, int ny)
{
//ctor
_nx = nx;
_ny = ny;
}
template <class T>
grid<T>::~grid()
{
//dtor
}
template <class T>
grid<T>::grid(const grid& other)
{
//copy ctor
}
template <class T>
void grid<T>::set_value(const std::vector<T> & val)
{
_value = val;
}
template class grid<double>;
template class grid<int>;
Merci
Hors ligne
#2 Le 12/10/2013, à 09:22
- lann
Re : Cpp classe et opérateur dans la classe
Il me semble qu'il faut tout mettre le code d'un template dans le header
<Modéré>
Hors ligne
#3 Le 12/10/2013, à 12:42
- boutor
Re : Cpp classe et opérateur dans la classe
Ca doit être juste pour la compilation.
Sinon il faut déclarer à la fin du cpp avec quelles grandeurs templatées on veut générer sa classe.
Hors ligne