IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Héritage et Templates


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut Héritage et Templates
    Bonjour à tous,

    J'ai une classe MATRIX

    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
     
    template<class T>
    class MATRIX
    {
    protected:
    	unsigned int L;
    	unsigned int C;
    	T *Array;
    public:
    	MATRIX(void);
    	MATRIX(const T& data);
    	MATRIX(const unsigned int& l, const unsigned int& c, bool init=false);
    	MATRIX(const unsigned int& l, const unsigned int& c, T *array);	
    	~MATRIX(void);
    	T& operator() (const unsigned int& i, const unsigned int& j) const;
    	void operator= (const MATRIX& m);
    .
    .
    .
    }
    et une classe fille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    template<class T>
    class VECTOR: public MATRIX<T>
    {
    public:
    	VECTOR(void);
    	VECTOR(const unsigned int& l, bool init=false);
    	VECTOR(const unsigned int& l, T *array);
    	VECTOR operator() (const unsigned int& n, unsigned int *array);
    	VECTOR(const T& a, const T& pas, const T& b);
    .
    .
    .
    }
    Lorsque je compile mon code et par exemple la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template<class T>
    T& VECTOR<T>::operator() (const unsigned int& i) const
    {
    	return Array[i];
    }
    g++ 3.4.2 me retourne qu'il ne connaît pas Array, membre pourtant hérité de MATRIX, alors qu'une ancienne version de g++ ne me retournait pas d'erreur !!! Quelqu'un saurait-il où se trouve le problème (sûrment synthaxique) ?? Merci par avance pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    C'est normal, à partir de gcc 3.4. La définition des templates est elle aussi soumise à un contrôle de type rigoureux. Dans les versions antérieures, le typage n'était vérifié que lors de la compilation de l'instance du template.

    Je pense que pour résoudre ton problème, il suffit simplement de préciser que Array
    est une variable d'instance de VECTOR.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<class T>
    T& VECTOR<T>::operator() (const unsigned int& i) const
    {
       return this->Array[i];
    }
    Je te conseil néanmoins de lire les 'Changelog' de gcc, concernant C++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup pour ta réponse, c'était effectivement ça le problème !

  4. #4
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Salut,

    C'est cool le programme que tu as.
    Regarde un peu ce raisonnement:
    1. Un tableau est une ensemble d'éléments accessibles par un index ordonné
    2. Un vecteur peut être considéré comme un tableau
    3. Une matrice peut être considéré comme un ensemble de vecteur disposé par ligne.

    Et donc définir une classe CArray comme tableau avec toutes les fonctionnalités générales de manipulation de tableau.
    Utiliser une classe CVector comme une classe dérivée de CArray qui définira des fonctionnalités propres aux vecteurs (math)
    Enfin définir une classe CMatrix qui comprend une donnée membre qui est un tableau de CVector càd un genre de CVector[]. Cette classe matrix contient toutes les fonctionnalités relatives aux matrices et qui bénificie des fonctionnalites des vecteurs.
    et donc
    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
     
    class CArray
    {
    //... fonctionnalités générales pour des tableaux 
    };
     
    class CVector: public CArray
    {
    //...fonctionnalités spécifiques à des vecteurs
    };
     
    class CMatrix
    {
    private:
         CVector* pVector;  // pointeur sur tableau de vecteur
    public:
    //...fonctionnalités pour les matrices
    };
    Cette juste une proposition de construction de classes mais je vois que tu es statifait de la solution qui t'es donnée

  5. #5
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    Si tu veux je peux d'envoyer mon code d'une classe vecteur et d'une classe matrix d'une centaine de fonctions membres sur la manipulation de ces objets mathématiques.
    Tu pourras t'inspirer.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 48
    Points : 46
    Points
    46
    Par défaut
    Merci pour ton aide !! Mais en fait moi aussi j'ai déjà écrit un très grand nombre de fonctions mathématiques (stat, proba, optimisation, classif, traitement signal, DWT...) et je suis juste en train d'essayer de les porter en C++ alors que je les avais initialement écrite en C !! Merci quand même pour ta proposition !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/01/2008, 23h39
  2. "Héritage" ou "Template de table"
    Par mr_yvele dans le forum PowerAMC
    Réponses: 1
    Dernier message: 13/09/2007, 17h45
  3. Héritage classe template->classe template
    Par zabibof dans le forum Langage
    Réponses: 5
    Dernier message: 11/08/2007, 11h05
  4. Réponses: 16
    Dernier message: 17/03/2007, 17h31
  5. héritage et template STL
    Par jevito dans le forum Langage
    Réponses: 5
    Dernier message: 21/09/2005, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo