|
|
|
![]() |
|
Strumenti |
![]() |
#1 | ||
Senior Member
Iscritto dal: May 2008
Messaggi: 1566
|
[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: Quote:
Quote:
Cosa sbaglio?
__________________
CM Obsidian 750D - Corsair TX650M - AMD Ryzen 7 3700x - Asus TUF B550-PLUS - nVidia Gigabyte GTX 1060 6GB G1 Gaming - Noctua D15S - Corsair Vengeance Pro 3600MHz 16GB - 2xHP x27i - Razer Deathadder - Logitech G15 v1 nVidia Edition- Roccat Taito King-Size - Fastweb (2011) | Alice(2015) | Alice(2016) | Eolo 30Mb (2016) | Wind3 4G Flat (2019) | PF AIR 100 (2021) |
||
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2010
Messaggi: 102
|
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....... |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: May 2008
Messaggi: 1566
|
Quote:
tombola.player.nome ovvero in cui richiamo un dato della struct. Comunque ecco la parte della struct e della classe: Codice:
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]; };
__________________
CM Obsidian 750D - Corsair TX650M - AMD Ryzen 7 3700x - Asus TUF B550-PLUS - nVidia Gigabyte GTX 1060 6GB G1 Gaming - Noctua D15S - Corsair Vengeance Pro 3600MHz 16GB - 2xHP x27i - Razer Deathadder - Logitech G15 v1 nVidia Edition- Roccat Taito King-Size - Fastweb (2011) | Alice(2015) | Alice(2016) | Eolo 30Mb (2016) | Wind3 4G Flat (2019) | PF AIR 100 (2021) |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Sep 2010
Messaggi: 102
|
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 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2008
Messaggi: 1566
|
Che sarebbe? Perdona la mia ignoranza ma ho fatto il primo anno di informatica e ho studiato C solo quest anno.
__________________
CM Obsidian 750D - Corsair TX650M - AMD Ryzen 7 3700x - Asus TUF B550-PLUS - nVidia Gigabyte GTX 1060 6GB G1 Gaming - Noctua D15S - Corsair Vengeance Pro 3600MHz 16GB - 2xHP x27i - Razer Deathadder - Logitech G15 v1 nVidia Edition- Roccat Taito King-Size - Fastweb (2011) | Alice(2015) | Alice(2016) | Eolo 30Mb (2016) | Wind3 4G Flat (2019) | PF AIR 100 (2021) |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
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
Codice:
playerS* getPlayer(void) const { return player; } |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: May 2008
Messaggi: 1566
|
Quote:
__________________
CM Obsidian 750D - Corsair TX650M - AMD Ryzen 7 3700x - Asus TUF B550-PLUS - nVidia Gigabyte GTX 1060 6GB G1 Gaming - Noctua D15S - Corsair Vengeance Pro 3600MHz 16GB - 2xHP x27i - Razer Deathadder - Logitech G15 v1 nVidia Edition- Roccat Taito King-Size - Fastweb (2011) | Alice(2015) | Alice(2016) | Eolo 30Mb (2016) | Wind3 4G Flat (2019) | PF AIR 100 (2021) |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
e allora non è quello il problema, il discorso è che se non incolli il codice è dura capirlo
![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: May 2008
Messaggi: 1566
|
Codice:
#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; }
__________________
CM Obsidian 750D - Corsair TX650M - AMD Ryzen 7 3700x - Asus TUF B550-PLUS - nVidia Gigabyte GTX 1060 6GB G1 Gaming - Noctua D15S - Corsair Vengeance Pro 3600MHz 16GB - 2xHP x27i - Razer Deathadder - Logitech G15 v1 nVidia Edition- Roccat Taito King-Size - Fastweb (2011) | Alice(2015) | Alice(2016) | Eolo 30Mb (2016) | Wind3 4G Flat (2019) | PF AIR 100 (2021) |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
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
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Sep 2010
Messaggi: 102
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: May 2008
Messaggi: 1566
|
Grazie mille!!
__________________
CM Obsidian 750D - Corsair TX650M - AMD Ryzen 7 3700x - Asus TUF B550-PLUS - nVidia Gigabyte GTX 1060 6GB G1 Gaming - Noctua D15S - Corsair Vengeance Pro 3600MHz 16GB - 2xHP x27i - Razer Deathadder - Logitech G15 v1 nVidia Edition- Roccat Taito King-Size - Fastweb (2011) | Alice(2015) | Alice(2016) | Eolo 30Mb (2016) | Wind3 4G Flat (2019) | PF AIR 100 (2021) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:59.