el cuba libre (Normal User)
Newbie
Messaggi: 20
Iscritto: 07/03/2011
|
salve a tutti
ho esigenza di creare una struttura dentro a una struttura. vorrei chiedervi cosa è sbagliato se dichiaro la struttura cosi
Codice sorgente - presumibilmente C++ |
struct giornate { struct partite { int a,b; char c; partite *x; }; giornate *x; }; int main ( ) { struct partite *ptr,root;//mi dice che é stata già dichiarata struct giornate *ptr1,root; cout<<"inserisci nome"<<endl; cin>>ptr->c; ptr=ptr->x=new partite; }
|
mi dice che sto facendo un uso non valido della struttura partite, e che è stata precedentemente dichiarata.
qualcuno sa aiutarmi??
grazie in anticipo!
|
|
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
|
il programma fà, solo che fare partite* partite[10] è usare una classe se non sbaglio, quindi non posso,il compilatore [QT creator] non me lo fa fare cosi come hai scritto te - el cuba libre - 26/04/11 16:03
|
QT Creator è un IDE e non un compilatore. Ho dato un occhio e non supporta il C, quindi, nel tuo codice, potresti usare tutte le classi che vuoi.
Scrivere "partite* partite" non funge perché c'è un conflitto di nomi. Non ci sono classi nel tuo progetto, quindi non stai "usando" nessuna classe (ma solo tipi di dato strutturati).
In pratica scrivere "int i" o scrivere "Giornata i" è la stessa cosa. Il compilatore si occupa di "allocare" la memoria necessaria, nello heap o nello stack (a seconda di dove scrivi quel coso).
Il codice funzionante è questo:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <cstring> #define MAX_PARTITE_PER_GIORNATA 10 using namespace std; //Definisco il "tipo di dato" Partita struct Partita { int a, b; char c[20]; }; //Definisco il "tipo di dato" Giornata struct Giornata { int tot_partite; Partita* partite[MAX_PARTITE_PER_GIORNATA]; //Una giornata contiene più partite }; int main (int argc, char* argv[]) { char tmp[20]; //var temporanea //Creo e inizializzo la giornata Giornata giornata; giornata.tot_partite = 0; //Leggo da tastiera il nome della partita cout << "Inserisci il nome della partita: "; cin >> tmp; //Creo e inizializzo una partita giornata.partite[giornata.tot_partite] = new Partita; //Aggiungo una partita giornata.tot_partite++; //Incremento il numero di partite presenti strcpy(giornata.partite[0]->c, tmp); //Stampo la struttura for (int i = 0; i < giornata.tot_partite; i++) { cout << "Stampo partita numero " << i << endl; cout << "\tNome partita: " << giornata.partite[i]->c << endl; } return 0; }
|
(compilato anche su qt creator) |
|
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
|
Premettendo che il codice è c++...
Nulla, in questo caso, giustifica l'esigenza di definire una struttura dentro un'altra.
Partita è una struttura a se stante, come lo è giornata.
E poi non si può usare una struttura come se fosse una variabile.
Codice sorgente - presumibilmente C/C++ |
struct partite *ptr,root;//mi dice che é stata già dichiarata
|
Non si può dichiarare partite in questo modo. È necessario utilizzare il risolutore di scope:
giornate::partite ....
Codice sorgente - presumibilmente Plain Text |
Questa cosa non ha alcun senso.
Prova a scrivere il codice senza usare strutture annidate |
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Eh si è logico, ho sbagliato! Sposta
Codice sorgente - presumibilmente C/C++ |
Dentro la fine della struttura giornate, riga 7.
P.S. sono d'accordo con Xaratromm
|
|
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
|
Fai così:
Codice sorgente - presumibilmente C++ |
struct Partita { int a, b; char c[20]; }; struct Giornata { int tot_partite; Partita* partite[MAX_PARTITE_PER_GIORNATA]; };
|
MAX_PATITE_PER_GIORNATA è una costante che indica il massimo numero di partite che si possono avere in un giorno (diciamo che l'ho messa per semplificarti il lavoro).
tot_partite tiene conto del numero di elementi presenti nell'array partite.
Dopodiché procedi in questo modo:
Codice sorgente - presumibilmente C/C++ |
//Dichiaro una giornata
Giornata giornata;
giornata.tot_partite = 0;
//Aggiungo una partita
giornata.partite[giornata.tot_partite] = new Partita;
giornata.tot_partite++;
|
Comunque sarebbe opportuno scrivere delle funzioni che lavorino su queste strutture dati
PS: il codice l'ho buttato giù senza provarlo, quindi fai le tue prove e posta il risultato (il tasto rispondi è in fondo alla pagina) |
|
Pitagora (Member)
Expert
Messaggi: 367
Iscritto: 12/06/2010
|
Codice sorgente - presumibilmente Plain Text |
struct giornate
* {
* struct partite
* {
* int a,b;
* char c[20];
* };
* };
* int main ( )
* {
* struct partite *ptr;
* struct giornate *ptr1
* cout<<"inserisci nome"<<endl;
* cin>>ptr1->ptr->c;
* }
_________________________________________
|
Questo dobrebbe essere cosí, poi chiaramente te lo dovrai aggiustare secondo le tue necessitá.
P.S. scusa l'indentazione ma scrivo dal telefono
Ultima modifica effettuata da Pitagora il 26/04/2011 alle 10:23 |
|