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++类继承,标识符未定义的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中使用 C++ 类 - 未声明的标识符错误 [重复]
C++ Visual Studio 2008 中未声明的标识符