2

次のコードをご覧ください

GameObject.h

#pragma once
class GameObject
{
protected:
    int id;

public:
    int instances;

    GameObject(void);
    ~GameObject(void);

    virtual void display();
};

GameObject.cpp

#include "GameObject.h"
#include <iostream>

using namespace std;

static int value=0;
GameObject::GameObject(void)
{
    value++;
    id = value;
}


GameObject::~GameObject(void)
{
}

void GameObject::display()
{
    cout << "Game Object: " << id << endl;
}

Round.h

#pragma once
#include "GameObject.h"
class Round :
    public GameObject
{
public:
    Round(void);
    ~Round(void);


};

Round.cpp

#include "Round.h"
#include "GameObject.h"
#include <iostream>

using namespace std;


Round::Round(void)
{
}


Round::~Round(void)
{
}

void display()
{
    cout << "Round Id: " << id;
}

クラス'id' : undeclared identifierでエラーが 発生します。Roundどうしてこれなの?助けてください!

4

2 に答える 2

6

この関数では:

void display()
{
    cout << "Round Id: " << id;
}

非メンバー関数id内で指定された変数にアクセスしようとしています。はグローバル変数またはローカル変数の名前ではないため、コンパイラはその名前を解決できません。したがって、識別子が宣言されていないというエラーが発生します。id

display()のメンバー関数を作成する場合はRound()、次のように宣言する必要があります。

class Round : public GameObject
{
public:
    Round(void);
    ~Round(void);
    void display(); // <==
};

そしてそれをこのように定義しました:

void Round::display()
//   ^^^^^^^
{
    ...
}

このように、関数Round::display()は仮想関数をオーバーライドしますGameObject::display()

于 2013-02-25T18:14:44.903 に答える
1

displayRound.cppファイルで指定されたグローバルスコープのメソッドを宣言しました。次のようにヘッダーとCPPを編集します。

Round.h

#pragma once
#include "GameObject.h"
class Round :
    public GameObject
{
public:
    Round(void);
    virtual ~Round(void);
    virtual void display(void);

};

Round.cpp

#include "Round.h"
#include "GameObject.h"
#include <iostream>

using namespace std;


Round::Round(void)
{
}


Round::~Round(void)
{
}

void Round::display()
{
    cout << "Round Id: " << id;
}

注-GameObjectのデストラクタを仮想化する必要があります

于 2013-02-25T18:23:43.277 に答える