Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 :

g++ a écrit :

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