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

Langage C++ Discussion :

Classe template - erreur compilation


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut Classe template - erreur compilation
    Bonjour,

    J'essaye de créer une classe de matrice à partir d'un std::map<std::pair<I,I>,T>
    avec par exemple I := unsigned int et T := double

    Lorsque je compile, j'ai l'erreur suivante:
    error C2923: 'std::pair' : 'row' is not a valid template type argument for parameter '_Ty1'
    Voici ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    template<class T,class I>
    inline T gMatrix<T,I>::operator() (I row, I col) const
    {
        if (row >= rows_ || col >= cols_)
           throw ("Matrix subscript out of bounds");
     
    	//we look if the element already exists
    	std::map<std::pair<I, I>, T>::iterator iter = data_.find(std::pair<row,col>);
    	if(iter != data_.end())	return iter->second; //yes, we return it
    	else return 0;
    }
    J'utilise ma classe cette manière dans mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gMatrix<double,unsigned int> m(10,10);
    	std::cout << m(0,0);
    Je ne comprends pas pourquoi ça ne fonctionne pas!
    Merci de votre aide
    Cordialement,
    Rodrigue

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Rodrigue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	std::map<std::pair<I, I>, T>::iterator iter = data_.find(std::pair<row,col>);
    std::make_pair(row, col), pas std::pair<row, col>

  3. #3
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Merci!
    Je venais à l'instant d'essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::pair<I,I>(row,col)
    Avec ma notation ou la vôtre, j'ai l'unique erreur suivante:
    error C2440: 'initializing' : cannot convert from 'std::_Tree<_Traits>::const_iterator' to 'std::_Tree<_Traits>::iterator'
    Il faut que je le déclare constant (const) ? Pourquoi?

  4. #4
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    A noter, que lorsque je le déclare const_iterator, ça compile mais j'aimerais connaître le pourquoi du comment

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Rodrigue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    template<class T,class I>
    inline T gMatrix<T,I>::operator() (I row, I col) const
    {
    	std::map<std::pair<I, I>, T>::iterator iter = data_.find(std::pair<row,col>);
    }
    Méthode const accédant à des itérateurs sur une donnée membre.

  6. #6
    Membre éclairé Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Par défaut
    Ok, merci beaucoup!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/11/2010, 14h15
  2. Réponses: 3
    Dernier message: 08/03/2010, 07h32
  3. Réponses: 16
    Dernier message: 28/09/2006, 18h08
  4. Réponses: 15
    Dernier message: 21/08/2006, 01h41
  5. Réponses: 3
    Dernier message: 22/08/2005, 18h28

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