View Full Version : [C]Classe di struct
Buongiorno a tutti. Vorrei chiedervi aiuto in merito all utilizzo delle struct dentro una classe.
Praticamente io devo creare il gioco della tombola: estrarre i numeri, generare schede ecc.
Ho pensato dunque di fare la struct player con dentro un vettore di char per il nome, e un array di int per la scheda del player.
Ora se nella classe definisco la variabile giocatore (o un vettore di essa) al momento della compilazione ovunque vi è un richiamo a una variabile della struct mi da errori: 35 C:\Users\Portatile\Desktop\tombola.cpp expected unqualified-id before '.' token
La riga dell errore è: tombola.player[a].scheda[i][j] = 0;
Questa è dentro a 3 for, uno per girare tutti i giocatori, e 2 per la matrice di interi della scheda.
Cosa sbaglio?
kevinpirola
03-07-2011, 15:29
amico.. se non posti anche il resto è impossibile saperlo....
è come se andassi dal meccanico con la macchina che fa un rumore alla trasmissione e gli portassi solo la cinghia.......
amico.. se non posti anche il resto è impossibile saperlo....
è come se andassi dal meccanico con la macchina che fa un rumore alla trasmissione e gli portassi solo la cinghia.......
Ripeto che l errore lo da SOLO e ripeto SOLO dove scrivo cose tipo:
tombola.player.nome ovvero in cui richiamo un dato della struct.
Comunque ecco la parte della struct e della classe:
struct players{
char nome[30];
int scheda[5][3];
};
typedef struct players playerS;
class tombola{
public:
tombola();
void estrai_num(); // controlla che non sia uscito e sia valido
void win_check(); // ambo, terna, quaterna, cinquina, tombola
void generascheda(); // controlla ripetizioni, non piu di 3 stessa decina
void stato();
private:
playerS player[100];
int uscite[90];
};
kevinpirola
03-07-2011, 20:56
sicuro che non siano delle variabili private che hanno bisogno di un metodo "get" ?
prova a mettere un metodo get che ritorna la variabile che ti serve, secondo me dovresti risolvere
sicuro che non siano delle variabili private che hanno bisogno di un metodo "get" ?
prova a mettere un metodo get che ritorna la variabile che ti serve, secondo me dovresti risolvere
Che sarebbe? Perdona la mia ignoranza ma ho fatto il primo anno di informatica e ho studiato C solo quest anno.
significa che forse stai provando ad accedere a campi privati dall'esterno della classe, cosa che non puoi fare, e la soluzione corretta per mantenere l'incapsulamento è un metodo pubblico, tipo
playerS* getPlayer(void) const
{
return player;
}
volendo puoi ritornare un const playerS* se vuoi che possa solo essere letto l'array
significa che forse stai provando ad accedere a campi privati dall'esterno della classe, cosa che non puoi fare, e la soluzione corretta per mantenere l'incapsulamento è un metodo pubblico, tipo
playerS* getPlayer(void) const
{
return player;
}
volendo puoi ritornare un const playerS* se vuoi che possa solo essere letto l'array
Troppo complicato per me. Eppure sto accedendo dal costruttore della classe...
e allora non è quello il problema, il discorso è che se non incolli il codice è dura capirlo :asd:
#include <iostream>
#include <cstdlib>
using namespace std;
int max_players=0;
struct players{
char nome[30];
int scheda[5][3];
};
typedef struct players playerS;
class tombola{
public:
tombola();
void estrai_num(); // controlla che non sia uscito e sia valido
void win_check(); // ambo, terna, quaterna, cinquina, tombola
void generascheda(); // controlla ripetizioni, non piu di 3 stessa decina
void stato();
private:
playerS player[100];
int uscite[90];
};
tombola::tombola(){
for(int i=0; i < 100; i++){
//tombola.player[i].nome = "";
}
for(int a=0; a < 100; a++){
for(int i=0; i < 5; i++){
for(int j=0; j < 3; j++){
tombola.player[a].scheda[i][j] = 0;
}}}
}
void tombola::stato(){
for(int i=0; i < max_players; i++){
cout << endl << "Nome: " << tombola.player[i].nome << endl << " - Schedina: ";
for(int a=0; a < 5; a++){
for(int b=0; b < 3; b++){
cout << tombola.player[i].scheda[a][b];
}
cout << endl;
}
}
cout << endl;
}
int main(){
tombola p;
cout << "Numero giocatori: ";
cin >> max_players;
p.stato();
system("PAUSE");
return 0;
}
il "." serve a riferirsi ai campi delle istanze, se ti riferisci a tombola come classe devi usare ::, ma comunque nel tuo caso non serve, ti basta scrivere player[a].scheda[i][j] per riferirti al campo dell'istanza su cui viene invocato il metodo
kevinpirola
03-07-2011, 22:04
il "." serve a riferirsi ai campi delle istanze, se ti riferisci a tombola come classe devi usare ::, ma comunque nel tuo caso non serve, ti basta scrivere player[a].scheda[i][j] per riferirti al campo dell'istanza su cui viene invocato il metodo
quote
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.