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)
{
}
我在创建抽象 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)
{
}