View Full Version : [c++]errore.tipo nn definito
ciao. sono un newbie di c++, per questo ho scritto un programma stupidissimo, giusto per fare esercizio. Il codice è questo
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int* p_x = NULL;
typedef struct { char x; char y; char w; char z; } nome_tipo;
main()
{
int a = 5;
int b = 6;
int risultato;
p_x = &a;
cout << a << endl;
cout << b << endl;
cout << risultato << endl;
cout << p_x << endl;
struct { char papa; char mamma; char ivan; char giada; } Familiari;
Familiari me;
me = { "Aldo", "Rosa", "fratello", "sorella"};
cout << me.papa << me.mamma << me.ivan << me.giada << endl;
if(char me.papa == Aldo && char me.mamma == Rosa &&
char me.ivan == fratello && me.giada == sorella)
{
cout << "TUTTO SECONDO I CALCOLI" << endl;
}
else
{
cout << "QUALCOSA NON QUADRA" << endl;
}
return(0);
}
le mie domande sono 2:
1)Perkè mi da errore nella riga "Familiari me;" dicendo ke familiari non è stato definito come tipo(eppure l'ho definito nella struttura).
2)Come far si ke il programma qando lo si esegue non si chiuda in un istante, ma resti aperto.
gfrazie a tutti..sciaoooo
1)Perkè mi da errore nella riga "Familiari me;" dicendo ke familiari non è stato definito come tipo(eppure l'ho definito nella struttura).
Attenzione, la definizione di una struttura, in generale, è:
struct nomestruttura { ... } oggetti;
dove nomestruttura è il nome della struttura e oggetti sono n variabili (separate da virgola) da definire subito.
Quindi tu facendo:
struct { char papa; char mamma; char ivan; char giada; } Familiari;
non hai creato un nuovo tipo "Familiari" ma hai creato una nuova unica variabile di nome "Familiari" il cui tipo è una struttura "anonima" che hai dichiarato.
Puoi fare:
struct Familiari { char papa; char mamma; char ivan; char giada; };
però ogni volta dovrai sempre usare struct Familiari, es:
struct Familiari fam1;
struct Familiari fam2;
oppure puoi fare (come in genere preferisco io ;) ):
typedef struct { char papa; char mamma; char ivan; char giada; } Familiari;
in questo modo Familiari è un tipo, es:
Familiari fam1;
Familiari fam2;
2)Come far si ke il programma qando lo si esegue non si chiuda in un istante, ma resti aperto.
Aspetti un tasto alla fine del programma.
cin.get();
struct nomestruttura { ... } oggetti;
usando questo per la definizione mi da errore di sintassi...non so perkè!
17Qwerty71
03-12-2005, 15:49
struct nomestruttura { ... } oggetti;
usando questo per la definizione mi da errore di sintassi...non so perkè!
Magari posta il codice come lo hai modificato, non facciamo mica miracoli :stordita:
quello l'ho risolto.ora c'è un aòtro problema.
typedef struct { char papa; char mamma; char ivan; char giada; } Familiari;
Familiari me;
me = { "Aldo", "Rosa", "fratello", "sorella"};
...mi da errore sulla riga di assegnazione valori alla variabile "me".
come mai?
thx
typedef struct { char papa; char mamma; char ivan; char giada; } Familiari;
Familiari me;
me = { "Aldo", "Rosa", "fratello", "sorella"};
Ci sono 2 errori nel codice sopra. Il primo è che una struttura può essere inizializzata solo nel momento della dichiarazione della variabile. Il secondo è che i campi della struttura li hai dichiarati come singoli caratteri.
Quindi puoi fare:
typedef struct { char *papa; char *mamma; char *ivan; char *giada; } Familiari;
Familiari me = { "Aldo", "Rosa", "fratello", "sorella"};
Oppure
typedef struct { char papa[20]; char mamma[20]; char ivan[20]; char giada[20]; } Familiari;
Familiari me = { "Aldo", "Rosa", "fratello", "sorella"};
17Qwerty71
04-12-2005, 14:03
quello l'ho risolto.ora c'è un aòtro problema.
typedef struct { char papa; char mamma; char ivan; char giada; } Familiari;
Familiari me;
me = { "Aldo", "Rosa", "fratello", "sorella"};
...mi da errore sulla riga di assegnazione valori alla variabile "me".
come mai?
thx
Manca ancora il nome della struttura :stordita:
struct nomestruttura { ... } oggetti;
Gli oggetti sono le "variabili" che sono soggette alla struttura.
Nel tuo esempio levi Famigliari e metti me
Leggiti questo: http://programmazione.html.it/c/c_25.htm
Manca ancora il nome della struttura
No, non manca niente. Una dichiarazione del tipo:
typedef struct { char papa; char mamma; char ivan; char giada; } Familiari;
è perfettamente lecita!! (a parte il fatto che, come ho già segnalato, SCYHO ha messo fin dall'inizio i campi come singoli caratteri)
Questa è una struttura senza nome ("anonima" si potrebbe dire) a cui però, grazie al typedef, è stato dato il nome "Familiari".
Se fosse stato scritto:
typedef struct familiari { char papa; char mamma; char ivan; char giada; } Familiari;
si potevano usare entrambi i modi:
struct familiari fam1 = { ... };
Familiari fam2 = { ... };
No, non manca niente. Una dichiarazione del tipo:
typedef struct { char papa; char mamma; char ivan; char giada; } Familiari;
è perfettamente lecita!! (a parte il fatto che, come ho già segnalato, SCYHO ha messo fin dall'inizio i campi come singoli caratteri)
Questa è una struttura senza nome ("anonima" si potrebbe dire) a cui però, grazie al typedef, è stato dato il nome "Familiari".
Se fosse stato scritto:
typedef struct familiari { char papa; char mamma; char ivan; char giada; } Familiari;
si potevano usare entrambi i modi:
struct familiari fam1 = { ... };
Familiari fam2 = { ... };
mi sto confondendo un pò...:boh:
ho un dubbio riguardante la prima parte del codice
//sezione dichiarazioni
int* p_x = NULL;
//
int a = 5;
p_x = &a;
cout << p_x << endl;
da quel ke ho studiato p_x è una variabile puntatore giusto?cioè fa rifermento al luogo della variabile a nella memoria.
come mai p_x mi stampa 0x23ff74? e come faccio invece a stampare il contenuto di a tramite p_x?
grazie ancora
17Qwerty71
04-12-2005, 21:11
No, non manca niente. Una dichiarazione del tipo:
typedef struct { char papa; char mamma; char ivan; char giada; } Familiari;
è perfettamente lecita!! (a parte il fatto che, come ho già segnalato, SCYHO ha messo fin dall'inizio i campi come singoli caratteri)
Questa è una struttura senza nome ("anonima" si potrebbe dire) a cui però, grazie al typedef, è stato dato il nome "Familiari".
Se fosse stato scritto:
typedef struct familiari { char papa; char mamma; char ivan; char giada; } Familiari;
si potevano usare entrambi i modi:
struct familiari fam1 = { ... };
Familiari fam2 = { ... };
Ho visto or ora che si tratta di un typedef :doh:
17Qwerty71
04-12-2005, 21:16
ho un dubbio riguardante la prima parte del codice
//sezione dichiarazioni
int* p_x = NULL;
//
int a = 5;
p_x = &a;
cout << p_x << endl;
da quel ke ho studiato p_x è una variabile puntatore giusto?cioè fa rifermento al luogo della variabile a nella memoria.
come mai p_x mi stampa 0x23ff74? e come faccio invece a stampare il contenuto di a tramite p_x?
grazie ancora
Perchè in questo modo stampa la locazione di memoria.
Se gli vuoi far stampare il contenuto della locazione di memoria a cui punta (quindi a) devi fare:
cout << *p_x << endl;
mi sto confondendo un pò...:boh:
Che cosa non ti è chiaro??
Perchè in questo modo stampa la locazione di memoria.
Se gli vuoi far stampare il contenuto della locazione di memoria a cui punta (quindi a) devi fare:
cout << *p_x << endl;
grazie tante
Che cosa non ti è chiaro??
no niente, siccome prima avete dettoil contrario nn sapevo quale metodo usare.
ora ho capito
(a dirla tutta sono un pò confuso su tutto il C++)
...cmq grazie tante lo stesso. :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.