在创建抽象类时,我遇到了关于Eclipse的问题。我不是很习惯处理头文件等等,我的代码基本上如下所示:(不显示所有内容,只是基本类来了解它的外观)
Equipment.h
namespace Equipments {
class Equipment{
public:
virtual ~Equipment();
virtual std::string get_category() const = 0;
protected:
Equipment(std::string name);
private:
const std::string name_;
};
class Weapon : public Equipment {
public:
Weapon(std::string name, std::string something_else);
virtual ~Weapon();
std::string get_category() const override { return "Weapon"; };
private:
const std::string something_else_;
};
} //end of namespace
现在,我遇到了.h和.cpp文件的问题
在.h文件中,在武器构造函数下,我习惯写作(因为我不使用头文件):
Weapon(std::string name, std::string something_else)
: Equipment{name}, something_else_{something_else}
{}
由于我无法真正做到这一点(据我所知),如何将参数发送到我的父类? (在这种情况下,让eclipse知道我希望我的名字参数发送到Equipment父类)
我应该在.cpp文件中这样做,如果是,怎么做?
现在是第二个问题。
在.cpp文件中,我创建了这样的设备类:
namespace Equipments {
Equipment::Equipment(std::string name) {
name_ = name;
}
Equipment::~Equipment() {
}
std::string Equipment::get_name()
{
return name_;
}
//etc
但我似乎无法创建我的武器类。如果我尝试:
Equipment::Weapon(std::string name, std::string something_else)
我只是找不到会员解除,如果我尝试:
Weapon::Weapon(std::string name, std::string something_else)
对于'Equipments :: Equipment :: Equipment()'
的调用我没有匹配功能我只是不知道eclipse是如何让我编写我的代码的,我知道这有点像菜鸟问题,但我已经很久没有在eclipse中使用头文件或c ++了。我真的很接近只是选择我的笔记本电脑和程序在ubuntu和gedit,所以我不必处理标题类,但是,我也不会学到任何东西。
答案 0 :(得分:3)
但我似乎无法创建我的武器类。如果我尝试:
Equipment::Weapon(std::string name, std::string something_else)
我只是找不到会员声明,
嗯,是的:您的Weapon类被称为Weapon
,它的构造函数被称为Weapon::Weapon
。它从Equipment
继承,它不会存储在其中。
如果我尝试:
Weapon::Weapon(std::string name, std::string something_else)
我得到了
no matching function for call to 'Equipments::Equipment::Equipment()'
这只是意味着你遗漏了基类构造函数(所以它试图使用默认的构造函数,它不存在) - 你不会显示整个代码,但它应该是
Weapon::Weapon(std::string name, std::string something_else)
: Equipment(name)
, something_else_(something_else)
{
}