|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2005
Città: A RRRRRRoma
Messaggi: 466
|
[C++]Aiuto con sette e mezzo
Allora avrei un problemino su questo sorgente che in un futuro prossimo dovrà diventare un sette e mezzo
Questo è il codice: Codice:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <ctime>
using namespace std;
const int MAX_ROWS = 5;
const int MAX_COLUMNS = 11;
class Carta
{
public:
Carta();
Carta(int num, string se);
void generaCarta(Carta* mazzoide[MAX_ROWS][MAX_COLUMNS]);
void print() const;
private:
int numero;
string seme;
};
Carta::Carta(){}
Carta::Carta(int num, string se)
{
numero = num;
seme = se;
}
void Carta::print() const
{
cout<<numero<<" di "<<seme<<endl;
}
void Carta::generaCarta(Carta* mazzoide[MAX_ROWS][MAX_COLUMNS])
{
srand (time(0));
int randseme = rand() % 4;
int randnumero = rand() % 10;
if(mazzoide[randseme][randnumero] == NULL)
generaCarta(mazzoide);
else mazzoide[randseme][randnumero]->print();
mazzoide[randseme][randnumero] = NULL;
}
int main()
{
int righe_seme = 4;
int colonne_numero = 10;
int i = 1;
Carta* mazzo[righe_seme][colonne_numero];
for(int j = 0;j<colonne_numero;j++)
{
mazzo[0][j] = new Carta(i, "coppe");
mazzo[1][j] = new Carta(i, "denari");
mazzo[2][j] = new Carta(i, "bastoni");
mazzo[3][j] = new Carta(i, "spade");
i++;
}
for(int i=0;i<righe_seme;i++)
{
for(int j=0;j<colonne_numero;j++)
{
mazzo[i][j]->print();
}
}
generaCarta(mazzo);
}
"error: generaCarta undeclared (first use this function)" bho sarà una boiata ma la mia mente ottusa non trova niente di sbagliato P.S.: nn è da molto che programmo... grazie mille in anticipo
__________________
...work in progress... |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
a) il metodo generaCarta suppongo che si voglia renderlo di "classe" e non di istanza. In pratica nella dichiarazione della classe metti static davanti alla dichiarazione del metodo. b) Quando chiami quel metodo dovresti usare: Carta::generaCarta(mazzo); c) La dichiarazione di mazzo che fai nel main non è comunque compatibile con il parametro di generaCarta. P.S.: io comunque avrei scelto un'altra strada: creare una classe Carta che incapsula solamente i dati della carta e una classe Mazzo che contiene al suo interno tutto il mazzo e con un metodo estrai() che estrae una carta (togliendola) dal mazzo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2005
Città: A RRRRRRoma
Messaggi: 466
|
Ok ho capito tutto grazie mille adesso cmq provo con la tua strada molto più efficiente che stupido sono stato a non pensarci...
però ho ancora una domanda: perchè la dichiarazione di mazzo nel main non è compatibile col parametro di generaCarta? A generaCarta non dovrei passare un array di puntatori di tipo Carta? grazie mille
__________________
...work in progress... |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
generaCarta ha il parametro dichiarato: Carta* mazzoide[MAX_ROWS][MAX_COLUMNS] (che sarebbe come dire Carta* mazzoide[5][11]) mentre invece nel main è dichiarato: Carta* mazzo[righe_seme][colonne_numero]; (che sarebbe come dire Carta* mazzo[4][10]; visti i valori delle 2 variabili) Il compilatore comunque li vede come tipi diversi. P.S.: tra l'altro non serve a molto (se non c'è una ragione precisa) usare un array bidimensionale per tenere tutte le carte. Puoi usare un semplice array monodimensionale.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2005
Città: A RRRRRRoma
Messaggi: 466
|
Ok tutto chiaro adesso...
per quanto riguarda l'array l'avevo fatto bidimensionale per rendere ancora più casuale l'estrazione della carte dal mazzo... ma in effetti adesso che mi ci fai pensare una bidimensione è alquanto inutile... ho ancora molta strada da fare purtroppo...
__________________
...work in progress... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:24.


















