PDA

Visualizza la versione completa : [C++] Errore: tipo non definito


Manuelandro
03-12-2005, 15:36
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

unomichisiada
03-12-2005, 16:28
Post successivo

unomichisiada
03-12-2005, 16:32
Originariamente inviato da unomichisiada
Sono un po arrugginito con il C++ ma la speigazione deovrebbe essere questa
1)Questo:


struct { char papa; char mamma; char ivan; char giada; } Familiari;

Definisce solo una variabile di nome Familiari di tipo
struct {bla...bla}, non definisce un nuovo tipo.Per fare quello che vuoi tu devi scrivere:


typedef struct familiari{ char papa; char mamma; char ivan; char giada; } Familiari;

Oppure puoi dare un nome alla struttura cos


struct Familiari{ char papa; char mamma; char ivan; char giada; };

e istanziare una variabile cos:


struct Familiari variabile;

In pratica typedef ti consente di non ripetere "struct" quando definisci una variabile di quel tipo,questo
perch gli stai dicendo "voglio introdurre un nuovo tipo di nome Familiari che un alias della struttura chiamata familiari".Claro?
2)metti alla fine della main (prima del return) system("PAUSE"); (funziona solo in win)

XWolverineX
03-12-2005, 18:20
In pratica stavi definendo una struct anonima, che una struct di cui puoi dichiarare solo un certo numero di istanze.



//Struct normale
struct Prova
{
int a;
int b;
int c;
};

//Struct normale typedef
typedef struct busta
{
int a,b,c;
} Prova;

//Struct anonima
struct
{
int a,b,c;
} Prova;



Nella terza definisci una struct e ne crei una istanza che si chiama Prova.
Non possibile istanziare altre struct di uesto tipo, a meno che non aggiungi il suo nome vicino a prova



struct
{
int a,b,c;
} Prova,Prova2,Prova3;

unomichisiada
03-12-2005, 19:43
Originariamente inviato da XWolverineX
In pratica stavi definendo una struct anonima, che una struct di cui puoi dichiarare solo un certo numero di istanze.



//Struct normale
struct Prova
{
int a;
int b;
int c;
};

//Struct normale typedef
typedef struct busta
{
int a,b,c;
} Prova;

//Struct anonima
struct
{
int a,b,c;
} Prova;



Nella terza definisci una struct e ne crei una istanza che si chiama Prova.
Non possibile istanziare altre struct di uesto tipo, a meno che non aggiungi il suo nome vicino a prova



struct
{
int a,b,c;
} Prova,Prova2,Prova3;

Esatto!

Manuelandro
04-12-2005, 15:30
typedef struct Familiari { char papa; char mamma; char ivan; char giada; } ;
Familiari me;
me = { "Aldo", "Rosa", "fratello", "sorella"};


a questo punto mi da errore nella riga di assegnazione valori alla variabile. come mai?
sul libro da cui sto studiando si pu fare in questo modo!

oregon
04-12-2005, 15:51
Originariamente inviato da Manuelandro


typedef struct Familiari { char papa; char mamma; char ivan; char giada; } ;
Familiari me;
me = { "Aldo", "Rosa", "fratello", "sorella"};




Ci sono parecchie cose sbagliate ...

Intanto nella typedef il tipo (Familiari) deve stare alla fine ...
Poi il tipo di dati dei singoli elementi non puo' essere un singolo carattere ma una stringa di caratteri ...
Gli elementi, inoltre, e' giusto che siano quelli indicati in



typedef struct { char papa[20]; char mamma[20]; char fratello[20]; char sorella[20]; } Familiari;


Detto cio', puoi inizializzare la struttura tutto in una riga



Familiari me = {"Aldo", "Rosa", "Ivan", "Giada"};

Manuelandro
04-12-2005, 16:09
perfetto.risolto un altro problema...(purtroppo la prima volta quindi credo siano normali tt questi errori :) )cmq procedendo avanti mi da un altro errore



if(char me.papa == "Aldo" && char me.mamma == "Rosa" &&
char me.ivan == "fratello" && me.giada == "sorella")
{



l'errore dovrebbe essere di sintassi.

oregon
04-12-2005, 16:59
S ... devi studiare bene la sintassi ...

Intanto non va indicato il tipo char e poi in C non puoi confrontare un array di caratteri con l'operatore ==

Devi usare una funzione apposita, la strcmp, ovvero

if(strcmp(me.papa, "Aldo")==0 && strcmp(me.mamma, "Rosa")==0)


(ho utilizzato solamente i primi due campi ...)

Loading