PDA

View Full Version : help c++:illegal use of this type as an expr


Dr. Halo
27-04-2004, 12:48
Ciao a tutti. Frequento poco questa sezione perchè sono alle prime armi con la programmazione in C/C++ e sto seguendo un piccolo corso che dovrebbe darmi le basi per poter procedere da solo.
Mi sono imbattuto in un erroe di compilazione che non riesco a comprendere. Potreste darmi un mano?
Il problema è che sto utilizzando un puntatore ad oggetto per inizializzare degli attributi dell'oggetto al di fuori della routine in cui l'ho definito... pensavo: semplice no? basta che lo passo alla routine che lo inizializza ed è fatta... be' quasi... nel senso che i risultati non sono quelli sperati e la compilazione sotto MS Visual C++ mi ritorna 1 errore ( adir il vero sono 7 ma tutti risolvibili risolvendo il primo) che non riesco a risolvere.... allego il listato...
grazie a tutti coloro che mi daranno una mano...
P.S.: lo so che a voi potrebbe sembrare banale ma io proprio non lo capisco...:cry: :cry: :cry: :cry: :cry:

Dr. Halo
27-04-2004, 14:43
:cry: :cry: :cry:
Nessuno sa aiutarmi????
E dire che C e C++ insieme sembrano essere i linguaggio meglio conosciuti di questo forum....:rolleyes:

/\/\@®¢Ø
27-04-2004, 17:01
Alcuni errori che ho trovato:


#include <iostream> // senza .h !


...
class paladino: public ...{
...
paladino();
};

paladino::paladino()
{
agilita = random(1,8);
arma = random(1,4);
cl_armatura = random(1,4);
difesa = random(1,10);
forza = random(1,10);
scudo = random(0,5);
vita = random(1,20);
turno = random(1,6);
}

...

class mostro : public ...
{
...
mostro();
};

mostro::mostro()
{
agilita = random(1,8);
arma = random(1,4);
cl_armatura = random(1,4);
difesa = random(1,10);
forza = random(1,10);
vita = random(1,20);
turno = random(1,6);
}


...

// Qeste due non servono, si usano i costruttori !
// void crea_paladino(paladino *pnt1); //
// void crea_mostro(mostro *pnt2);

paladino p1, p2, *pnt1;
// Queste non servono !
// pnt1 = &p1;
// crea_paladino(paladino *pnt1);
// pnt1 = &p2;
// crea_paladino(paladino *pnt1);

num_mostri = random(2,4);

cout << "I due paladini si scontreranno contro i " << num_mostri << " mostri" << endl;

mostro *pnt2;

}

Questi sono solo alcuni, ce ne saranno a naso anche altri.
dichiari una istanza di una classe senza i puntatori, ad esempio con

...
paladino p1;
....


Viene chiamato automaticamente il "costruttore" ovvero una funzione particolare della classe paladino, che ha lo stesso nome della classe. Nelle correzioni sopra esposte, la voce

class paladino: ... {
paladino();
}

e' la dichiarazione e

paladino::paladino()
{
...
}

L'implementazione ( la prima occorrenza di paladino specifica che stai scrivendo l'impelentazione di un metodo della classe, la seconda che si tratta proprio del costruttore

ciao
Marco

Dr. Halo
27-04-2004, 17:08
grazissime!! mi sei stato di grande aiuto! ho trovato anche l'errore che mi bloccava oltretutto...