C ++ eclipse。抽象类不会编译

时间:2015-04-16 10:53:27

标签: c++ abstract-class header-files

在创建抽象类时,我遇到了关于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,所以我不必处理标题类,但是,我也不会学到任何东西。

1 个答案:

答案 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)
{
}