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 :

Problème de création d'objet


Sujet :

C++

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Août 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 60
    Points : 90
    Points
    90
    Par défaut Problème de création d'objet
    Bonjour,
    je souhaite créer une classe (dans un jeu de blackjack --> classe joueur) qui comporterait une liste d'objet carte comme ci dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include "stdafx.h"
    #pragma once
    class joueur 
    {
    public :
    	int money;
    	int partie_gagne;
    	int total;
     
    	carte c;
    	c.nom = 'K';
    	//essai pour instacier une carte
    Voici la classe carte dans sn plus simple appareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #pragma once
    class carte
    {
    	public :
    		//Variables
    		char nom;
    		int valeur;
    ...
    Le stdafx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #pragma once
    #include <stdio.h>
    #include <tchar.h>
    #include <conio.h>
    #include "carte.h"
    #include "partie.h"
    #include "joueur.h"
    Sauf que en voulant compiler j'ai les erreurs suivantes...


    Erreur 1 error C2143: erreur de syntaxe : absence de ';' avant '.' c:\users\sylvain\documents\visual studio 2005\projects\blackjacktp\blackjacktp\joueur.h 14
    Erreur 2 error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut c:\users\sylvain\documents\visual studio 2005\projects\blackjacktp\blackjacktp\joueur.h 16

    Erreur 3 error C2238: jetons inattendus avant ';' c:\users\sylvain\documents\visual studio 2005\projects\blackjacktp\blackjacktp\joueur.h 16
    Merci de m'éclairer de vos conseils avisés

    Bonne jouréne a tous !

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Pour commencer, je te conseille un petit tour du côté des différents tutoriels. Ils te permettront de trouver rapidement des réponses.
    Pour ton problème particulier, il faut comprendre que les membres d'une classe ne sont pas initialisés au moment de leur déclaration, mais dans le constructeur de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class joueur 
    {
    private :
    	int money;
    	int partie_gagne;
    	int total;
     
    	carte c;
    public:
            joueur();
    ...
    };
    Dans ton .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    joueur::joueur()
    :money(0),partie_gagne(0),total(0),c('K',12)
    {
    }
    ...
    De la même façon:
    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
     
    // .hpp
    class carte
    {
    	private :
    		//Variables
    		char nom;
    		int valeur;
     
            public:
            carte(char _nom, int _valeur);
    ...
     
    //.cpp:
    carte::carte(char _nom, int _valeur)
    :nom(_nom),valeur(_valeur)
    {
    }

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Déjà, tu ne peux pas définir une variable membre de type Carte dans ton objet de type joueur "comme cela"...

    La définition de la carte en elle-même (l'instanciation, si tu préfères) doit se faire dans une méthode, que ce soit le constructeur, si la carte a sensiblement la même durée de vie que le joueur, ou dans une autre méthode qui pourrait être nommée - par exemple - demandeCarte.

    Ensuite, il faut savoir que le compilateur ne connait, pour une unité de compilation donnée (concrètement, pour un couple de fichier *.cpp+ *.h équivalent) que ce qu'il a déjà rencontré.

    Lorsque le compilateur rencontre dans la classe joueur la déclaration du membre c de type carte, il ne sait donc pas à quoi cela peut bien ressembler...

    Il faut donc s'assurer que le compilateur sache au minimum que la classe carte existe avant la ligne à laquelle cette déclaration se trouve (au minium par une déclaration anticipée), et, comme tu demande ici de créer un objet de type carte, il faut que même que le compilateur sache... de quoi c'est composé, pour pouvoir "réserver" un espace mémoire suffisant.

    Il faut donc idéalement inclure le fichier d'en-tête carte.h dans le fichier d'en-tête joueur.h

    En outre, tu nous précise que tu veux donner une liste de cartes au joueur... mais tu ne lui en donne qu'une.

    Je sais qu'un élément peut être considéré comme une liste, mais, idéalement, le joueur sera quand même susceptible d'avoir plusieurs cartes

    On se rend donc tout de suite compte qu'il est préférable de prévoir tout de suite la possibilité pour le joueur de disposer de plusieurs cartes, et de les regrouper.

    Si tu connais le C, tu serais peut être tenté par le fait de déclarer carte comme un pointeur sur carte, et de jouer avec l'allocation dynamique de la mémoire... Mais ce serait un tord.

    En effet, le C++ fournit en standard une série de conteneurs dont l'usage est bien plus sécurisant et pratique que ce que l'on peut faire à la main:

    Tu disposes, par exemple, de la classe vector, disponible dans l'espace de noms std par inclusion du fichier d'en-tête <vector>, qui fournit les comportements identiques à ce que l'on trouve dans un tableau "C style".

    Mais tu peux aussi te tourner vers la classe list, elle aussi disponible dans l'espace de noms std, mais par inclusion du fichier d'en-tête <list> cette fois, qui fournit les comportements que l'on attend généralement d'une liste doublement chainée.

    Et tu disposes encore d'autres classes dont la liste serait trop longue à faire ici... Tu trouvera un diagramme te permettant de choisir le conteneur le plus adapté à ton usage dans cette entrée de la FAQ

    Au final, ta classe joueur devrait être définie sous une forme proche de
    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
    #include "carte"
    #include <vector>
    #ifndef JOUEUR_HPP
    #define JOUEUR_HPP
    class joueur
    {
        public:
            joueur(partie* p, int m); // le constructeur par défaut
            ~joueur(); // le destructeur
            /* il faudrait une série de méthode "qui vont bien" */
        private:
            partie* part;// pour savoir quelle partie il joue
            int money ; // pour savoir de combien d'argent il dispose
            std::vector<cartes> hand; // pour savoir les carte qu'il a en main
     
    };
    #endif // JOUEUR_HPP
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2011, 14h48
  2. [Débutant] Problème de création d'objet (ActiveX))
    Par Mat32 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 02/06/2011, 15h00
  3. Vbs et html problème de création d'objet
    Par Picco dans le forum VBScript
    Réponses: 0
    Dernier message: 06/10/2008, 14h48
  4. Problème de création d'objet
    Par Gouyon dans le forum Delphi
    Réponses: 2
    Dernier message: 15/05/2007, 13h20
  5. Problème de création d'objets
    Par gids01 dans le forum Langage
    Réponses: 3
    Dernier message: 24/10/2006, 10h42

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