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 :

Erreur lors de la configuration de templates


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreur lors de la configuration de templates
    Bonjour, je suis nouveau sur ce forum, alors je ne sais pas si je suis au bon endroit pour demander des conseils de programmation.

    J'ai commencé à apprendre le C++ depuis une semaine, et j'ai commencé un petit projet personnel pour le plaisir qui consiste à un jeu de hockey.
    Le jeu contient plusieurs classes(Player,Skaters,Forwards,Defensemen,Goaltenders,Team et Game). La partie sur la création des joueurs ne causent aucun problème, cependant, j'ai pensé à une classe "Game" qui servirait à instancier une partie, et que son constructeur prendrait 2 équipes pour qu'elles s'affrontent, et créarait la surface de jeu qui serait un tableau statique 2D qui pourrait prendre autant des joueurs(1 joueur par case),la puck et d'autres objets qui viendront plus tard. Mon problème, est que j'éssais de définir un template de type "T" dans ma classe "Game" pour que mon attribut "ice[5][14]"(ma surface de jeu) puissent prendre des objets de type T. Cependant, peu importe comment j'arrange mon code, j'ai toujours des erreurs du genre "T was not declared in this scope"(dans mon main), ou template argument is invalid. Voici les 3 parties de code venant de 3 fichiers utilisés pour les templates.

    main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Game <T> game1(&MTL,&TOR); //C'est ici l'erreur de T n'est pas declaré,


    Game.h

    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 Game
    {
        public:
     
            Game(Team* T1,Team* T2);
            virtual ~Game();
     
        protected:
     
        private:
            T* ice[6][15]; //Je veux que ma surface de jeu puissent prendre des objets de plusieurs type
     
    };

    Game.cpp


    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
    using namespace std;
     
    template <class T>  //
    Game<T>::Game(Team* T1,Team* T2)
    {
        ice[1][3] = T1->getGoaltender(); //Retourne une référence de type Goaltenders qui doit être placé sur ma surface de jeu.
        ice[14][3] = T2->getGoaltender();
     
        //ctor
    }
    template <class T>
    Game<T>::~Game()
    {
        //dtor
    }




    Voilà, j'espère avoir placé mon problème au bon endroit, et merci d'avance!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le code ne peut pas être dans un cpp.
    Un tempalte est un modèle (c'est littéralement la traduction), et en tant que modèle il faut savoir comment l'utiliser quand tu y fais appel.
    Donc toutes les fonctions template doivent être connues quand tu veux les utiliser et leur code doit être inclus.

    https://cpp.developpez.com/faq/cpp/?...qu-un-template
    https://cpp.developpez.com/faq/cpp/?...tion-des-liens
    https://cpp.developpez.com/faq/cpp/?...lasse-template
    https://cpp.developpez.com/faq/cpp/?...-les-templates
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre réponse rapide!

    Cependant comment faire pour instancier un objet de type Game où l'un des attributs peut être de type variable? Je sais qu'il faut que je spécifie, par exemple, le type de l'objet avant de l'envoyer dans mon tableau, mais la je ne peux même pas créer un Objet "Game", et ensuite envoyer des objets dans mon tableau(en les spécifiants).
    Je voudrais pouvoir créer mon objet en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Game game1(Team &t1,Team &t2)
    Sans avoir à spécifier de type, et par la suite faire un genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    game1.pushElement<Type en question EX:Player>(T &T)
    est-ce que c'est claire?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Tu ne peux pas. Ta demande est un contresens. Tu crées un template puis tu espères l'utiliser sans déclarer de type. C'est impossible.
    Tu peux très bien avoir un type de base et utiliser ce type de base puis utiliser des héritages pour pousser des types réels.
    Et il n'y a aucun besoin de template pour ça.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Daccor merci!

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/11/2006, 01h01
  2. Réponses: 4
    Dernier message: 22/02/2006, 14h11
  3. [JMF][débutant] Erreur lors de l'exécution
    Par july dans le forum Multimédia
    Réponses: 7
    Dernier message: 19/01/2006, 10h30
  4. Réponses: 6
    Dernier message: 20/11/2005, 02h53
  5. [tomcat] Erreur lors de la configuration
    Par Mathieu.Nanoux dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 06/06/2005, 17h15

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