17

これは私のプログラムの 1 つのクラスです。プログラム全体をコンパイルしようとすると、次のようなエラー メッセージが表示されます。

main.cpp:174: エラー: '((Scene*)this)->Scene::lake' にクラス タイプがありません

起源

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

4 に答える 4

17

問題は次の行にあります。

Lake lake(int L);

オブジェクトを宣言しようとしているだけなら、Lakeおそらく(int L). あなたが持っているのは、 alakeを返し、a をパラメーターとしてLake受け入れる関数を宣言することです。int

オブジェクトを構築するときに L を渡そうとする場合lake、コードを次のようにする必要があると思います。

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 行が追加されていることに注意してください。これはメンバーの初期化と呼ばれ、メンバー変数を構築する方法です。詳細については、こちらのよくある質問をご覧くださいまたは、ここここで見つけたその他のヒント。

于 2013-01-03T17:28:12.657 に答える
3

lake1 つの引数を取り、 を返すメソッドとして宣言しますLake。次に、 を介してメソッドを呼び出してみますlake.light_up()。これにより、観察したエラーが発生します。

lakeこの問題を解決するには、変数として宣言する必要がLake lake;あります。

于 2013-01-03T17:28:11.157 に答える
1

lakeScene のメンバー関数として宣言しました (ただし、定義したことはありません) :

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

しかし、 では、変数であるかのようplotに使用しようとします。lake

int plot()
{
    lake.light_up();
于 2013-01-03T17:29:11.277 に答える