PDA

View Full Version : [c++]errore.tipo nn definito


SCYHO
03-12-2005, 13:32
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

andbin
03-12-2005, 14:18
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();

SCYHO
03-12-2005, 15:17
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:

SCYHO
04-12-2005, 13:23
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

andbin
04-12-2005, 14:00
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

andbin
04-12-2005, 19:34
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 = { ... };

SCYHO
04-12-2005, 21:00
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:

SCYHO
04-12-2005, 21:05
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;

andbin
04-12-2005, 21:26
mi sto confondendo un pò...:boh:
Che cosa non ti è chiaro??

SCYHO
04-12-2005, 21:43
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

SCYHO
04-12-2005, 21:45
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