2013-01-03 9 views
12

To jedna klasa z mojego programu! Kiedy próbuję skompilować cały program, otrzymuję komunikat o błędzie, jak poniżej:nie ma klasy C++

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

Źródłem

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

Jezioro to metoda, a nie zmienna Jezioro nad jeziorem (int L); lake.light_up(); // To nie ma sensu. – DGomez

+0

Jezioro jest klasą i próbuję stworzyć jej obiekt jezioro w klasie scena –

+0

Pewnie jest to klasa, ale jezioro (małymi literami) jest metodą i próbujesz wywołać metodę ten obiekt, ta linia jest błędna, lake.light_up(); – DGomez

Odpowiedz

13

Twój problem jest w następujący wiersz:

Lake lake(int L); 

Jeśli jesteś po prostu staramy się deklarować Lake obiekt to prawdopodobnie chcesz usunąć (int L). To, co tam masz, deklaruje funkcję lake, która zwraca wartość Lake i jako parametr przyjmuje wartość int.

Jeśli starasz się przekazać w L przy konstruowaniu swój obiekt lake, to myślę, że chcesz, aby Twój kod powinien wyglądać tak:

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; 
    } 
..... 

zauważy 4 linie dodany do konstruktora. Nazywa się to inicjowaniem członków i sposobem konstruowania zmiennych członkowskich. Przeczytaj więcej na ten temat w tym faq. Lub kilka innych ciekawostek, które znalazłem here i here.

3

zadeklarować lake jako metoda, która przyjmuje jeden argument i zwraca Lake. Następnie próbujesz wywołać metodę za pomocą lake.light_up(). To powoduje błąd, który obserwujesz.

Aby rozwiązać problem, musisz zadeklarować lake jako zmienną, np. Lake lake;, lub musisz przestać próbować wywoływać metodę na nim.

1

pan zadeklarowana (ale nie określono) lake jako funkcję składową sceny:

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

Ale wtedy w plot, spróbować użyć lake jakby to była zmienna:

int plot() 
{ 
    lake.light_up();