Problème de classe abstraite - C++
Tohan
-
ElementW Messages postés 5690 Statut Contributeur -
ElementW Messages postés 5690 Statut Contributeur -
Salut,
J'ai un code c++ comprenant, entre autres, une classe Entite héritant d'une classe Entite_Pure comprenant les méthodes pures afin que la classe Entite ne soit pas abstraite.
Pourtant, lorsque je veux déclarer un objet Entite dans ma classe Collision, il semblerait que ma classe Entite soit abstraites.
Classe Entite_Pure:
Classe Entite :
Classe Collision :
Message d'erreur :
PS : J'ai une multitude d'autres erreurs, mais c'est celle-ci qui me pose problème.
Merci pour votre aide.
J'ai un code c++ comprenant, entre autres, une classe Entite héritant d'une classe Entite_Pure comprenant les méthodes pures afin que la classe Entite ne soit pas abstraite.
Pourtant, lorsque je veux déclarer un objet Entite dans ma classe Collision, il semblerait que ma classe Entite soit abstraites.
Classe Entite_Pure:
#ifndef ENTITE_PURE_H
#define ENTITE_PURE_H
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
using namespace sf;
class Entite_Pure
{
public:
Entite_Pure();
virtual void setPosition(Vector2f p)=0;
virtual Vector2f getTaille()=0;
virtual void setTop(bool up)=0;
virtual void setBottom(bool bottom)=0;
virtual void setLeft(bool left)=0;
virtual void setRight(bool right)=0;
protected:
};
#endif // ENTITE_PURE_H
Classe Entite :
#ifndef ENTITE_H
#define ENTITE_H
#include "Entite_Pure.h"
using namespace std;
using namespace sf;
class Entite : public Entite_Pure
{
public:
Entite();
Vector2f getPosition();
protected:
Vector2f position;
Vector2f taille;
};
#endif // ENTITE_H
Classe Collision :
#ifndef COLLISION_H
#define COLLISION_H
#include <list>
#include "Block.h"
#include "Perso.h"
#include "Fonctions.h"
using namespace std;
using namespace sf;
class Collision
{
public:
Collision();
bool PointIntoSquare(Vector2f p, Entite b);
bool SquareIntoSquare(Entite b1, Entite b2);
bool contactSquares(Entite b1, Entite b2);
void trouverCote(Entite *b1, Entite *b2);
void trouverLesCotes(Entite *b1, Entite *b2);
void updateContact();
void addEntite(Entite *e);
private:
list<Entite*> Lentite;
};
#endif // COLLISION_H
Message d'erreur :
16|error: cannot declare parameter 'b' to be of abstract type 'Entite'|
PS : J'ai une multitude d'autres erreurs, mais c'est celle-ci qui me pose problème.
Merci pour votre aide.
A voir également:
- Problème de classe abstraite - C++
- Logiciel de classement de photos gratuit - Guide
- Classe ram - Guide
- Logiciel de classement de documents gratuit - Télécharger - Bureautique
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Excel
- Bluetooth mercedes classe a 2005 - Forum Autoradio
1 réponse
'lut, en prenant un
Le hic, c'est que ton objet abstrait
Donc, il suffit d'empêcher la copie, et pour ça, on se sert de références (pointeurs masqués si tu veux):
from human import idiocy
del idiocy
Entitetout court, C++ a un comportement défini: copier l'objet pour l'utiliser dans ta fonction.
Le hic, c'est que ton objet abstrait
Entite_Purene peut pas être utilisé pour être copié (constructeur de copie inexistant, devrait être virtuel... joyeux bazar).
Donc, il suffit d'empêcher la copie, et pour ça, on se sert de références (pointeurs masqués si tu veux):
class Collision
{
public:
Collision();
bool PointIntoSquare(const Vector2f &p, const Entite &b) const;
bool SquareIntoSquare(const Entite &b1, const Entite &b2) const;
void trouverCote(Entite &b1, Entite &b2);
void trouverLesCotes(Entite &b1, Entite &b2);
void updateContact();
void addEntite(Entite *e);
private:
list<Entite*> Lentite;
};Et dans ton code:bool Collision::PointIntoSquare(const Vector2f &p, const Entite &b) const {
...
}Tu te sers de b(et
p) comme tu l'aurais fait sans référence. J'ai rajouté des
constet passé le vecteur en référence: essaie de tout passer en
constet référence dans les cas où tu ne fais que lire un objet, pas le modifier; ça évite les copies d'objet inutiles. Pareil pour le
constdes méthodes, pour quand tu modifies pas l'objet auquel elle appartiennent.
from human import idiocy
del idiocy