没有匹配的函数调用CTOR,多重继承
no matching function call to ctor, multiple inheritance
我非常绝望我的其他具有相同继承的类工作,我编写的这个类是如此简单,它不再有效。我不知道该怎么办,这非常非常令人沮丧,事实上,这是一个简单的类,定义了敌人在他们创造时做简单的预定行为。
#include "RD_Infested.hpp"
#include "World.hpp"
#include "SteeringBehavior.hpp"
RD_Infested::RD_Infested(const string& oname, const sf::Vector2f& position, esc::World & w )
: esc::Critter(oname , position, w),
esc::Offensive(*this)
{
esc::Critter::setPathTraversalPolicy(new esc::SteeringBehavior(*this));
}
RD_Infested::~RD_Infested()
{
}
void RD_Infested::update( float e )
{
if (!esc::Object::isActive() )
return;
esc::Offensive::executeAttackOrder( e );
esc::Offensive::executeDefensiveStance( e );
if ( !esc::Offensive::isOnAttackRange() )
esc::Critter::makePursuit( e );
esc::Critter::getPathTraversalPolicy()->updatePolicy( e );
}
RD_Infested* RD_Infested::getInstance()
{
return this;
}
这是它的类头:
#ifndef RD_INFESTED_HPP
#define RD_INFESTED_HPP
#include <SFML/Graphics.hpp>
#include "Critter.hpp"
#include "Offensive.hpp"
class RD_Infested : public esc::Critter,
public virtual esc::Offensive
{
public:
RD_Infested( const string&, const sf::Vector2f&, esc::World& );
virtual ~RD_Infested();
virtual void update( float = 0.0f );
RD_Infested* getInstance();
};
#endif // RD_INFESTED_HPP
所以这个类所做的是从小动物继承,这是一个移动的对象,进攻是它的行为,所以反过来在概念上它变成了"一个进攻性小动物"。
这是它给我的错误:
error: no matching function for call to 'esc::Behavior::Behavior()'|
这是攻击类:我已经删除了不必要的功能
#ifndef OFFENSIVE_HPP
#define OFFENSIVE_HPP
#include <string>
using std::string;
#include<stack>
using std::stack;
#include "Behavior.hpp"
#include "Weapon.hpp"
namespace esc
{
class World;
class Object;
class Critter;
class Manager;
class AttackCapability;
// Worlds
class Offensive : public virtual Behavior
{
public:
/****/
protected:
explicit Offensive( Critter * );
virtual ~Offensive();
private:
/****/
};
}
#endif // OFFENSIVE_HPP
这是行为类:
#ifndef BEHAVIOR_HPP
#define BEHAVIOR_HPP
#include<stack>
using std::stack;
#include <string>
using std::string;
#include "Critter.hpp"
namespace esc
{
class World;
class Behavior
{
protected:
explicit Behavior( Critter * );
virtual ~Behavior();
/****/
private:
/****/
};
}
#endif // BEHAVIOR_HPP
这个错误我不知道如何解决。我做了关于生成默认 ctor 的研究,但我仍然不知道甚至不理解这种问题。我不知道如何解决这个问题。
谢谢,:)
Offensive
构造函数需要一个指向Critter
对象的指针:
explicit Offensive( Critter * );
但是你把一个对象传递给它
esc::Offensive( *this )
因为this
是一个指针,你取消引用它。所以只需使用esc::Offensive(this)
.但下一点是,将this
指针传递给派生类的构造函数初始值设定项列表中的基类构造函数可能不是一个好主意。
错误:调用 'esc::Behavior::Behavior()' 时没有匹配函数|
客户端的某些部分可能代码尝试使用其默认构造函数创建TestConstructDerived
实例。
此默认构造函数已定义(因为它未被带参数的构造函数的定义或= delete
禁用),但Offensive
的默认构造函数未定义,因为它具有定义了参数的构造函数。
有关定义默认构造函数的条件的详细信息,请参阅此问题。
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- C++多重继承和鸭子类型
- C++两次从文件保存对象读取多重继承
- 没有匹配的函数调用CTOR,多重继承
- CPP 多重继承意外调用 CTOR