2017-01-22 1 views
2

Je programme un jeu de blackjack simple pour un examen universitaire. Le jeu n'a pas de graphique, il imprime tout le monde sur la console. Le projet a trois classes: Deck, Card, Special Card. Je veux vous montrer seulement la classe Deck parce que c'est mon problème. Dans la classe Deck, il y a un deck paramater qui est un tableau de Cards (array of object) "Card * deck [52]" c'est la définition. Dans la fonction buildDeck() ce tableau de la carte est implémenté (chaque emplacement du tableau est rempli de différentes cartes.) Maintenant, je veux avoir une fonction qui retourne ce deck pour que je puisse l'utiliser dans le principal. .h et Deck.cppImpossible de retourner un tableau d'objet avec une fonction get

DECK.H 
#ifndef DECK_H 
#define DECK_H 
#include "Card.h" 

class Deck 
{ 
    public: 
     Deck(); 
     void buildDeck(); 
     void mixDeck(); 
     Card * getDeck(); 

    private: 
     const char * H = "hearts"; 
     const char * D = "diamonds"; 
     const char * C = "clubs"; 
     const char * S = "spades"; 
     Card * deck[52]; 
}; 

#endif // DECK_H 

et voilà le cpp

#include <iostream> 
#include "Deck.h" 
#include "Card.h" 
#include "Special_Card.h" 
using namespace std; 

Deck::Deck(){} 

void Deck::buildDeck(){ 
    //here we got a series of for statements which create the deck 
    //and assign every location of the array to a different card. I 
    //won't post this part to keep the code simple 
} 

Card * Deck::getDeck(){ 
    return deck; //HERE I GOT THE ERROR 
} 

Lorsque je tente de construire l'application à la ligne 57 (la ligne où je mets le commentaire « // iCI J'ai eu l'erreur ") J'ai eu cette erreur:

error: cannot convert 'Card**' to 'Card*' in return 

Avez-vous une idée sur la façon de résoudre ce problème?

+0

N'utilisez pas de tableaux et de pointeurs bruts, utilisez std :: vector. Et est-ce que cela a vraiment du sens pour un Deck de contenir un tableau pour pointer sur Deck? –

+0

Cela ne concerne pas votre erreur, mais vous avez déjà inclus 'Card.h' dans votre en-tête, il n'est donc pas nécessaire de l'inclure de nouveau dans votre fichier' .c'. – PhotometricStereo

+1

Si vous voulez un tableau de 'Card's utilisez' Card deck [52]; 'au lieu de' Card * deck [52]; 'et si vous pouvez utiliser C++ 11 utilisez' std :: array 'au lieu de tableaux bruts. – MRB

Répondre

0

Juste pour répondre à votre question: si vous déclarez membre variables deck comme Card * deck[52], cela représente un tableau de 52 pointeurs vers des objets de cartes, alors qu'une signature Card* getDeck() indique un pointeur vers un objet de la carte, pas un pointeur sur un tableau de pointeurs.

Par conséquent, pour se débarrasser de l'erreur, vous devez écrire

Card ** getDeck(); 
2

vous avez déclaré le pont comme un tableau de pointeurs vers la carte de classe pendant que vous voulez retourner un pointeur sur la carte de classe afin que vous pouvez retourner un élément de plate-forme de tableau yhe:

Card * Deck::getDeck(){ 
      return deck[0]; // or any other element 
} 

ou si vous voulez retourner tout le tableau de pointeurs vous pouvez déclarer la fonction comme:

Card** Deck::getDeck(){ 
    return deck; // 
}