2

请看下面的代码

游戏对象.h

#pragma once
class GameObject
{
protected:
    int id;

public:
    int instances;

    GameObject(void);
    ~GameObject(void);

    virtual void display();
};

游戏对象.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;
}

圆形.h

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


};

圆形.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()
//   ^^^^^^^
{
    ...
}

这样, functionRound::display()将覆盖 virtual function GameObject::display()

于 2013-02-25T18:14:44.903 回答
1

display您在 Round.cpp 文件中声明了一个全局范围的方法。像这样编辑您的标题和cpp:

圆形.h

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

};

圆形.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 回答