My Thing类派生自Entity类,它具有以下构造函数
Entity::Entity(string sNames, double xcord, double ycord)
:m_sName(sNames), m_dX(xcord),m_dY(ycord){}
Thing的构造函数是
Thing::Thing(string sName, double xcord, double ycord):
Entity(sName, xcord, ycord),
m_iHealth(100),m_Weapon(Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord)){}
问题是我在Thing构造函数中遇到错误“没有合适的默认构造函数”。我指定使用我的Entity构造函数而不是默认值的问题是什么。为了让这个问题更让我感到困惑,我还有另一个来自实体的课程
Weapon::Weapon(string sName, bool iMagical, double dRange, int iDamage,double
dRadius, double dSpawnX, double dSpawnY):
Entity(sName, dSpawnX, dSpawnY), m_bMagical(iMagical), m_dRange(dRange), m_iDamage(iDamage),
m_dRadius(dRadius)
{
}
运行没有错误,但它似乎与我的Thing构造函数具有更多变量完全相同。我确定我错过了一些小事,但我已经被困了一段时间。
你是对的,有一些没有被注释掉的剩余代码。看起来很奇怪,成员变量减速中的错误出现在构造函数中,但无论如何都要感谢。这总是帽子给我带来的简单事情。
答案 0 :(得分:0)
或许你的Thing
实际上没有默认构造函数,而且需要一个。{1}}。像这样的程序可能会像你看到的那样产生错误。
#include <string>
using std::string;
struct Entity {
std::string m_sName;
double m_dX, m_dY;
Entity(std::string, double, double);
};
struct Weapon : Entity {
bool m_bMagical;
double m_dRange;
int m_iDamage;
double m_dRadius;
Weapon(std::string, bool, double, int, double, double, double);
};
struct Thing : Entity {
int m_iHealth;
Weapon m_Weapon;
Thing(std::string, double, double);
};
// OP's code starts here
Entity::Entity(string sNames, double xcord, double ycord)
:m_sName(sNames), m_dX(xcord),m_dY(ycord){}
Thing::Thing(string sName, double xcord, double ycord):
Entity(sName, xcord, ycord),
m_iHealth(100),m_Weapon(Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord)){}
Weapon::Weapon(string sName, bool iMagical, double dRange, int iDamage,double
dRadius, double dSpawnX, double dSpawnY):
Entity(sName, dSpawnX, dSpawnY), m_bMagical(iMagical), m_dRange(dRange), m_iDamage(iDamage),
m_dRadius(dRadius)
{
}
// OP's code ends here
int main () {
Thing th;
}
在g ++下,准确的错误是:
th.cc: In function ‘int main()’:
th.cc:40: error: no matching function for call to ‘Thing::Thing()’
th.cc:27: note: candidates are: Thing::Thing(std::string, double, double)
th.cc:16: note: Thing::Thing(const Thing&)
答案 1 :(得分:0)
假设Thing::m_Weapon
被声明为Weapon
而不是Weapon*
,Weapon&
或等效,那么您需要更改此内容:
m_Weapon(Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord))
到此
m_Weapon("Fists", false, 10.0, 5, 1.0, xcord, ycord)
您正在构建一个临时Weapon
,然后尝试从该临时值构建m_Weapon
。据推测,Weapon
没有以Weapon
作为输入的复制构造函数。