【问题标题】:c++ class inheritance, identifier undefinedc++类继承,标识符未定义
【发布时间】:2016-09-29 20:52:52
【问题描述】:

我是对象编程和 c++ 的新手。

我正在应用 SoloLearn c++ 课程中关于类继承的内容。

类敌人:enemy.h

class enemy
{
public:
    enemy();
    ~enemy();
    void setAttackPower();
protected:
    int aP;
};

enemy.cpp

#include "enemy.h"
#include <iostream>
using namespace std;

enemy::enemy()
    {
        cout << "constructor" << endl;
    }
enemy::~enemy()
    {
        cout << "destructor" << endl;
    }

int aP=0;
void setAttackPower(int a) {
        aP = a;
    }

类忍者,继承自敌人: ninja.h

#include "enemy.h"

class ninja: public enemy
{
public:
    ninja();
    ~ninja();
    void attack();
};

ninja.cpp

#include "ninja.h"
#include <iostream>
using namespace std;

ninja::ninja()
{
}

ninja::~ninja()
{
}

void attack() {
    cout << "Ninja attack " << aP << endl;
}

错误是:

标识符“aP”未定义。我看不出问题。谁能帮帮我?

【问题讨论】:

  • 你在setAttackPower之前忘记了enemy::,在attack之前忘记了ninja::
  • void attack() 不是ninja 的成员。
  • @Pete Becker void attack() 是 ninja 头文件中声明的公共方法。 @Alexey Guseynov 如果我将enemy:: 放在setAttackPower 之前,将ninja:: 放在attack 之前,Visual Studio 会向我发出错误信号。
  • @simmy - 类ninja 有一个名为attack 的公共成员函数的声明,但在名为“source”的sn-p 末尾的void attack() 不是那个成员功能。将其更改为void ninja::attack()
  • @Pete Becker 谢谢你,它现在可以工作了。但是为什么我不需要与文件 enemy.cpp 中的void setAttackPower(int a) { 相同(我编辑了文件的名称以使其更清晰)?

标签: c++ inheritance


【解决方案1】:

敌人.cpp int aP=0; 您创建了 2 个具有相同名称的值:第一个属于类,第二个是全局值。编译器无法确定您尝试使用哪一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    相关资源
    最近更新 更多