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 :

liste d'arguments modèle ?


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut liste d'arguments modèle ?
    Bonjour

    J'ai un message d'erreur unique mais je ne sais pas ce que cela signifie, est-ce que quelqu'un pourrait m'éclairer ???

    error C2955: 'datets::TimeSeries'*: l'utilisation d'une classe modèle requiert une liste d'arguments modèle

    datets est le nom de mon namespace et TimeSeries le nom de ma classe

    Merci

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Ma boule de cristal est en panne.
    Il est où le code ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Code C++ : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include "Date.h"
    #include <map>
    #include "stdlib.h"
     
    namespace datets {
     
    	template <class G>
     
    	class TimeSeries {
    		int n;
    		std :: map <Date, G> ts;
     
    	public :
     
    		TimeSeries (int);
     
    	};
     
    }
    #endif
     
     
     
     
     
     
    #include "StdAfx.h"
    #include "TimeSeries.h"
    #include "Date.h"
    #include <map>
     
    namespace datets {
     
    	//Constructeur
    	TimeSeries :: TimeSeries (int _n) : n(_n) {
    			ts = ts[n];
    		}
     
    }



    Voilà mon code

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Le but est de créer un map avec une date et un type générique

  5. #5
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Constructeur
    TimeSeries :: TimeSeries (int _n) : n(_n) {
    ts = ts[n];
    }

    Il faut rajouter, comme pour chaque fonction membre, un template <class G>:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Constructeur
    template<class G>
    TimeSeries :: TimeSeries (int _n) : n(_n) {
    ts = ts[n];
    }

  6. #6
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Dans le .cpp il n'y a plus de template.
    Donc :

    1) Attention à ne pas mettre de templates dans un autre fichier que l'en-tête sans inclure ce fichier à la fin de l'en-tête (cf la FAQ C++, section templates, "Erreur de liens" quelque chose comme ça)

    2) Si tu déclares une classe comme modèle, dans son implémentation tu dois forcément faire apparaître des templates puisque ton code dépend du type passé en paramètre.

    Quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    template <class G>
    class Truc
    {
    public:
    void f();
    };
     
    // plus loin dans le code
    template <class G> void Truc<G>::f()
    {
    // ...
    }

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Ou alors tu définis ta méthode en même temps que tu la déclare:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template<typename T>
    class x{
       void foo() {
       ...
       }
    };
    On a rarement besoin de faire autrement, et ça fait toujours gagner des lignes.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci mille fois, j'ai passé des heures avec mon binome on a tourné le problème dans tous les sens sans arriver à rien ...

    J'ai l'habitude du Java et de définir les méthodes en même temps que je les déclare, mais là j'ai un projet à faire et on doit séparer déclaration et implémentation

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Citation Envoyé par PititeValoche Voir le message
    J'ai l'habitude du Java et de définir les méthodes en même temps que je les déclare, mais là j'ai un projet à faire et on doit séparer déclaration et implémentation
    La je dis "moui". Ton prof t'a surement demandé ça avec une bonne intention mais je vais quand même te mettre en garde.
    Certains considèrent que c'est une force du C++ que de pouvoir séparer déclaration et implémentation. Pour ma part je pense que trop de détails de sa syntaxe font qu'il n'est pas bon pour ça (obligation de déclarer les membres privates dans le header, les templates dans le header, ect...), que c'est bien plus une nécéssité technique du à son prédecesseur le C.
    Alors je te conseillerais de te concentrer plus sur l'aspect fonctionnel:
    - pourquoi déclarer les fonctions et méthodes non-template dans un cpp? -> pour masquer l'implémentation, réduire les temps de compilation et réduire la taille de l'exécutable
    - pourquoi déclarer les fonctions et méthodes template dans le header? -> parceque sauf cas exceptionnel on y est obligé, et tant qu'à faire autant optimiser la quantité de code à taper en faisant une déclaration+définition, de tête je dirais que ça ne pose de problème que si on manipule une classe pas encore définie (si on utilise des classes amies)
    - pourquoi utiliser un header par classe? -> pour mieux s'y retrouver et parfois gérer certains conflits avec des déclarations interdépendantes

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/02/2009, 13h28
  2. [Débutant] Utiliser des listes en argument d'une fonction
    Par erkenbrand dans le forum Windows Forms
    Réponses: 10
    Dernier message: 29/05/2008, 12h56
  3. Réponses: 21
    Dernier message: 21/03/2007, 05h18
  4. Getopt, liste d'argument assignée à une option
    Par gobgob dans le forum Modules
    Réponses: 3
    Dernier message: 19/01/2007, 11h02
  5. Réponses: 4
    Dernier message: 28/11/2006, 09h50

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