Polimorfizm, default constructor cannot be referenced.

0

Posiadam interfejs:

class Kangaroos
{
public:
    virtual void draw(sf::RenderWindow window) = 0;
    virtual void movement() = 0;
    virtual void options() = 0;
    virtual void update(float deltaTime) = 0;

protected:
    sf::RectangleShape kangaroo;
    sf::Vector2f startpos;
    sf::Vector2u kangaroosize;
    Animation animation;
};

oraz zwykłą klasę KangarooBen, która ma dziedziczyć po tym interfejsie.

class KangarooBen :public Kangaroos
{
public:
    KangarooBen();
    ~KangarooBen();
};

problem w tym, że wyświetla mi się błąd default constructor cannot be referenced it is deleted funcion.

KangarooBen::KangarooBen()
{ // tu blad
}

Z czego ten błąd wynika?

0

Google podrzuca informacje że był taki bug w Visual Studio. Z jakiej wersji kompilatora korzystasz?

0

2017 15.0 spróbuje zaktualizować, bo niby już jest 15.5 zobaczymy cos sie stanie :)

0

A gdzie konstruktor virtualny klasy bazowej?
virtual ~Kangaroos() = default;

0

a jest on konieczny?, zawsze robiłem bez i działało, może miałem szczęście dorzucę w takim razie ten konstruktor wirtualny.

1

Problem jest zapewne to, że to nie jest interface!
To powinno wyglądać tak:

class Kangaroos
{
public:
    // powinno się wymusić wirtualny dtor.
    virtual ~Kangaroos() {}

    virtual void draw(sf::RenderWindow window) = 0;
    virtual void movement() = 0;
    virtual void options() = 0;
    virtual void update(float deltaTime) = 0;

    // interface nie ma pól
};

A twój błąd zapewne wynika z tego, że jedno z pól w Kangaroos nie ma domyślnego konstruktora, więc kompilator nie potrafi wygenerować domyślnego konstruktora dla Kangaroos i w konsekwencji problem jest dziedziczony w KangarooBen.

offtopic: Liczba mnoga w nazwie klasy to złe rozwiązanie.

offtopic2: warto obejrzeć jak interface mogą wyglądać w C++20.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0