【发布时间】:2012-12-11 00:13:24
【问题描述】:
调用派生类中定义的方法时出现编译器错误。编译器似乎认为我所指的对象是基类类型:
weapon = dynamic_cast<Weapon*>(WeaponBuilder(KNIFE)
.name("Thief's Dagger")
.description("Knife favored by Thieves")
.attack(7) // error: class Builder has no member called attack
.cost(10) // error: class Builder has no member called cost
.build());
确实,Builder 不包含attack 或cost:
class Builder
{
protected:
string m_name;
string m_description;
public:
Builder();
virtual ~Builder();
virtual GameComponent* build() const = 0;
Builder& name(string);
Builder& description(string);
};
但是派生类WeaponBuilder 可以:
enum WeaponType { NONE, KNIFE, SWORD, AXE, WAND };
class WeaponBuilder : public Builder
{
int m_cost;
int m_attack;
int m_magic;
WeaponType m_type;
public:
WeaponBuilder();
WeaponBuilder(WeaponType);
~WeaponBuilder();
GameComponent* build() const;
// should these be of reference type Builder or WeaponBuilder?
WeaponBuilder& cost(int);
WeaponBuilder& attack(int);
WeaponBuilder& magic(int);
};
我不确定为什么编译器在 WeaponBuilder 类中找不到 attack 或 cost 方法,因为它显然存在。我也不确定为什么它将对象识别为基类Builder 的实例。
【问题讨论】:
标签: c++ inheritance methods compiler-errors base-class