2013-01-03 20 views
12

Questa è una classe del mio programma! Quando sto cercando di compilare l'intero programma, ottengo un messaggio di errore come questo:non ha classe tipo C++

main.cpp:174: error: '((Scene*)this)->Scene::lake' does not have class type

La fonte

class Scene 
{ 
    int L,Dist; 
    Background back ; 
    Lake lake(int L); 
    IceSkater iceskater(int Dist); 
public : 
    Scene(int L, int Dist) 
    { 
     cout<<"Scene was just created"<<endl; 
    } 

    ~Scene() 
    { 
     cout<<"Scene is about to be destroyed !"<<endl; 
    } 
}; 
+5

lake è un metodo, non una variabile Lago lago (int L); lake.light_up(); // Questo non ha senso – DGomez

+0

Lake è una classe e sto cercando di creare il suo oggetto lago nella scena di classe –

+0

Certo è una classe, ma il lago (in lowcase) è un metodo, e ti stai trince per chiamare un metodo di quell'oggetto, questa linea è sbagliata, lake.light_up(); – DGomez

risposta

13

Il tuo problema è nella seguente riga:

Lake lake(int L); 

Se stai solo cercando di dichiarare un oggetto Lake allora probabilmente desidera rimuovere le (int L). Quello che hai lì sta dichiarando una funzione lake che restituisce un Lake e accetta un int come parametro.

Se stai cercando di passare a L quando si costruisce l'oggetto lake, allora penso che si desidera che il codice a guardare come questo:

class Scene 
{ 
    int L,Dist; 
    Background back ; 
    Lake lake; 
    IceSkater iceskater; 
public : 
    Scene(int L, int Dist) : 
     L(L),  
     Dist(Dist), 
     lake(L), 
     iceskater(Dist) 
    { 
     cout<<"Scene was just created"<<endl; 
    } 
..... 

Nota 4 linee aggiunti al costruttore. Questo è chiamato inizializzazione del membro e il suo modo di costruire variabili membro. Maggiori informazioni su questo in questo faq. O qualche altro bocconcino che ho trovato here e here.

3

Dichiarate lake come un metodo che prende un argomento e restituisce un Lake. Quindi prova a chiamare un metodo su di esso tramite lake.light_up(). Questo causa l'errore che osservi.

Per risolvere il problema, è necessario dichiarare lake una variabile, ad es. Lake lake;, oppure è necessario smettere di provare a chiamare un metodo su di esso.

1

Hai dichiarato (ma mai definito) lake come una funzione membro di scena:

class Scene 
{ 
    // ... 
    Lake lake(int L); 

Ma poi in plot, si tenta di utilizzare lake come se fosse una variabile:

int plot() 
{ 
    lake.light_up(); 
Problemi correlati