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 :

Fonction template dans une classe template


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Fonction template dans une classe template
    Bonjour,


    J'ai une classe que j'aimerai initialiser en lui passant un tableau de paires de chaîne de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    template<class T>
    class MaClasse
    {
         template<unsigned int N> MaClasse(const char* sTab[N][2]);
    };
    Je n'arrive pas à implémenter cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template <class TKey, unsigned int N> MaClasse(const char* sTab[N][2]);
    Le compilateur me dit "error C2244: 'MaClasse<T>::{ctor}'*: impossible de faire correspondre la définition de fonction avec une déclaration existante"


    Quelqu'un peut-il m'aider ?


    Merci,


    A bientôt

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Est-ce que ceci marche ?
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <class TKey>
    template <unsigned int N> MaClasse<TKey>::MaClasse(const char* sTab[N][2])
    {
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Oui là la fonction compile mais l'utilisation déconne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char* cTab[][2] = {{"ID1", "VALUE1"}, {"ID2", "VALUE2"}};
    MaClasse<int> obj(cTab);
    J'ai une erreur :
    error C2784: impossible de déduire l'argument modèle pour 'const char *[N][2]' à partir de 'const char *[2][2]'

    Y'es con c'compilateur :s


    Merci pour ton aide

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ha c'est bon, il fallait faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    template <class TKey>
    template <unsigned int N> MaClasse<TKey>::MaClasse(const char* (&sTab)[N][2])
    {
    }

    Merci

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et si tu passes l'argument par référence constante et non par valeur ?
    C'est ce que font les fonctions de la CRT Microsoft, comme strcpy_s...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    C'est bien ce que j'ai fait les références constantes ? J'ai trouvé ça dans du code de boost.


    Par contre pour l'utilisation, je suis obligé de passer par un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char* cTab[][2] = {{"ID1", "VALUE1"}, {"ID2", "VALUE2"}};
    MaClasse<int> obj(cTab);
    Mais je ne peux pas faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClasse<int> obj({"ID1", "VALUE1"}, {"ID2", "VALUE2"});
    Y'a pas un moyen pour utiliser ce constructeur sans devoir déclarer de tableau juste avant ? C'est pour essayer d'être plus flexible.


    Merci

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Essai peut-être en rendant const ta référence:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    template <class TKey>
    template <unsigned int N> MaClasse<TKey>::MaClasse(const char* const (&sTab)[N][2])
    {
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/11/2010, 14h15
  2. Spécialisation de fonction template dans une class template
    Par summerstorm dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2010, 20h15
  3. Réponses: 4
    Dernier message: 20/10/2009, 08h54
  4. Réponses: 8
    Dernier message: 20/07/2007, 14h28
  5. Réponses: 4
    Dernier message: 08/11/2005, 15h10

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