2013-01-03 18 views
12

これは私のプログラムの1クラスです!私は、全体のプログラムをコンパイルしようとしているとき、私はこのようなエラーメッセージが表示されます。にはクラスタイプC++がありません

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

ソース

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はメソッドであり、変数ではありません。 Lake lake(int L); lake.light_up(); //これは意味をなさない – DGomez

+0

湖はクラスで、私はクラスシーンでオブジェクトの湖を作成しようとしています –

+0

確かにクラスですが、湖(小文字で)はメソッドであり、あなたはメソッドを呼び出すtryngです。そのオブジェクトは、この行が間違っている、lake.light_up(); – DGomez

答えて

13

あなたの問題は、次の行です。あなたが持っているものは、Lakeを返し、パラメータとしてintを受け入れる関数lakeを宣言しています。

あなたlakeオブジェクトを構築する際にLに合格しようとしている場合は、私はあなたのコードは次のようになりたいと思う:

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

は4行があなたのコンストラクタに追加注意してください。これはメンバ初期化とメンバ変数の作成方法と呼ばれます。詳しくはfaqをご覧ください。または、私が見つけた他のいくつかのちょっとしたビットherehere。シーンのメンバ関数として

3

あなたは一つの引数を取り、Lakeを返すメソッドとしてlakeを宣言する。次に、lake.light_up()経由でメソッドを呼び出してみます。これにより、エラーが発生します。

この問題を解決するには、lakeを変数として宣言する必要があります。 Lake lake;、またはメソッドの呼び出しを停止する必要があります。あなただけの、あなたはおそらく(int L)を削除するLakeオブジェクトを宣言しようとしている場合

Lake lake(int L); 

1

あなたが宣言した(しかし、定義されたことがない)しましたlake

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

しかし、その後plotに、あなたはそれが変数であるかのようlakeを使用しよう:

int plot() 
{ 
    lake.light_up(); 
関連する問題