c++类继承,标识符未定义

Posted

技术标签:

【中文标题】c++类继承,标识符未定义【英文标题】:c++ class inheritance, identifier undefined 【发布时间】: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) 相同(我编辑了文件的名称以使其更清晰)? 【参考方案1】:

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

【讨论】:

以上是关于c++类继承,标识符未定义的主要内容,如果未能解决你的问题,请参考以下文章

C++ 类实例标识符未声明

在 Visual Studio 中使用 C++ 类 - 未声明的标识符错误 [重复]

C++未定义的标识符“_TCHAR*”

C++ Visual Studio 2008 中未声明的标识符

vs中新建一个C++空项目导入.H和.CPP文件string报错未定义标识符?

未定义标识符/未声明