|
|||||||
|
|
|
![]() |
|
|
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: 09:40.




















