我有一个基类A,在这个类中,有一个派生类B的向量,我把类C对象添加到这个列表中(C是B的一个派生类)。但是现在我无论是从B还是C中都无法访问任何变量。
我的类结构是这样的。
Skill.h
class Skill
{
public:
Skill()
{
}
vector <AttackSkill*> attacks;
vector <UtilitySkill*> utilities;
vector <MoveSkill*> movement;
};
攻击技能.h
#pragma once
#include "Skill.h"
class AttackSkill :
public Skill
{
public:
AttackSkill()
{
}
string skillName;
int dmgMod;
int baseAcc;
};
其中一个技能
#pragma once
#include "AttackSkill.h"
class Axeblade :
public AttackSkill
{
public:
Axeblade()
{
skillName = "Axeblade";
dmgMod = 0;
baseAcc = 72;
}
};
这是新技能的添加方法
attacks.push_back(new Axeblade);
我只是想能够访问变量。
例如:"skillPtr "是指向Skill对象的指针。
"skillPtr "是指向Skill对象的指针。
for (int i = 0; i < skillPtr->attacks.size(); i++) //No problem here
{
cout << "Skill " << i << ") " << skillPtr->attacks[i]->skillName << endl;
}
错误C2039 'skillName': 不是'Skill'的成员。
我在这里做了一些猜测,因为问题并不完全具体,但它可能会有帮助......
您的 class Skill
包含三个向量(聚合),它被定义技能类型的子类继承(继承)。你应该把这两个原则分解开来。应该有一个类包含一个角色的向量,让我把它叫做 SkillSet
. 对了,你应该 不发 using namespace
在头文件中.)
class SkillSet
{
public:
std::vector <AttackSkill *> attacks;
std::vector <UtilitySkill *> utilities;
std::vector <MoveSkill *> movement;
};
然后就会有 另一个 所有技能的基类,它将包含所有技能的属性。
class Skill
{
public:
std::string skillName;
};
然后你可以继承这个新的 Skill
类。
class AttackSkill :
public Skill
{
public:
int dmgMod;
int baseAcc;
};
class Axeblade :
public AttackSkill
{
public:
Axeblade()
{
skillName = "Axeblade";
dmgMod = 0;
baseAcc = 72;
}
};
在创建和填充一个 SkillSet
对象。
SkillSet hero0;
hero0.attacks.push_back(new Axeblade);
你可以简单地访问它的公共成员。
std::cout << hero0.attacks[0]->skillName;
参见 我的代码示例.
还有一些注意事项需要考虑。
new
,你应该 delete
例如,在destructor中。