동일한 상속 작용을하는 다른 클래스가 필사적입니다. 필자가 작성한이 클래스는 단순하고 더 이상 작동하지 않습니다. 나는 무엇을 해야할지 모르겠다. 매우 실망 스럽다. 사실 그것은 단순한 미리 결정된 행동을 만드는 적을 정의하는 간단한 클래스이다. 여기ctor와 일치하는 함수 호출이 없습니다. 복수 상속
#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
객체에 대한 포인터를 기대
기본 ctor는 프로그래머가 ctor를 제공하지 않는 경우에만 생성됩니다. –
예 기본 ctor를 제공하지 않았지만 왜 생성합니까? 이미 이미 공격 클래스에 대한 주장을 이미 입증하고 있습니다. 실제로 RD_Infested가 Offensive Critter 일 때 볼 수 있듯이, 먼저 Critter가 생성되고 다음 공격은 Critter 클래스에 대한 포인터를받습니다. 나는 여기에 내 코드에 계속 추함이 있다는 것을 알고 있지만이 오류로 인해 나는 오늘 밤 잠을 자지 못한다. –
불쾌감은 행동을 상속하고 그 행동을 부릅니다. 명시 적으로 호출하지 않으므로 기본값이 호출됩니다. 그러나 행동에는 기본 ctor가 없습니다.그것이 오류 메시지가 말하고자하는 것입니다. –