C++ 蚀。摘要 class 无法编译

C++ eclipse. Abstract class won't compile

我在创建抽象 classes 时遇到了关于 Eclipse 的问题。我不太习惯处理 header 文件等,我的代码基本上如下所示:(不显示所有内容,只是基本的 class 来了解它的外观)

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文件中,武器构造器下,我习惯这样写(因为我不用header文件):

Weapon(std::string name, std::string something_else)
    :    Equipment{name}, something_else_{something_else}
{}

因为我真的不能这样做(据我所知),我该如何将参数发送到我的 parent class? (在这种情况下,让 eclipse 知道我想将我的名称参数发送到设备 parent class)

我应该在 .cpp 文件中这样做吗?如果是的话,怎么做?

现在是第二个问题。

在 .cpp 文件中,我这样创建我的设备 class:

namespace Equipments {

Equipment::Equipment(std::string name) {
    name_ = name;
}

Equipment::~Equipment() {
}

std::string Equipment::get_name()
{
    return name_;
}

//etc

但我似乎无法创建我的武器 class。如果我尝试:

Equipment::Weapon(std::string name, std::string something_else)

我只是找不到成员声明,​​如果我尝试:

Weapon::Weapon(std::string name, std::string something_else)

我没有得到匹配函数来调用 'Equipments::Equipment::Equipment()'

我只是不知道 eclipse 如何让我编写代码,我知道这是一个小白问题,但我没有在 eclipse 中使用 header 文件或 c++相当长的时间。我真的很接近只选择我的笔记本电脑和 ubuntu 中的程序,而不是 gedit,这样我就不必处理 header classes,但是,我不会什么都学。

But I can't seem to create my Weapon class. If I try:

Equipment::Weapon(std::string name, std::string something_else)

I just get member declaration not found,

嗯,是的:你的武器 class 叫做 Weapon,它的构造函数叫做 Weapon::Weapon。它 Equipment 继承,它不存储在其中。

and if I try:

Weapon::Weapon(std::string name, std::string something_else)

I get

no matching function for call to 'Equipments::Equipment::Equipment()'

这只是意味着您遗漏了基础 class 构造函数(因此它试图使用不存在的默认构造函数)- 您没有显示整个代码,但它应该是

Weapon::Weapon(std::string name, std::string something_else)
  : Equipment(name)
  , something_else_(something_else)
{
}