Déjà, tu risque d'avoir un gros problème, vu que ta fonction castillBoard() est déclarée constante, et qu'elle renvoie un ElementBilboard sous forme d'une référence constante.
Or, ElementBillboard est une classe ayant, de toutes évidence (et à juste titre) sémantique d'entité, vu qu'elle est non copiable et non assignable (le constructeur de copie (ElementBillboard(ElmentBillboard const &) et l'opérateur d'affectation ElementBillboard & operator = (ElementBillboard const &) ont été définis comme "delete").
Tu ne peux donc pas créer de copie de cet élément, et la constance induite par l'appel à castillBoard t'empêchera de le modifier. Ce n'est pas une mauvaise chose, loin de là, mais... ce n'est peut-être pas ce que tu veux
Pour résoudre ton problème, tu dois simplement récupérer l'élément renvoyé par la fonction castillBoard sous la forme d'une référence (pour éviter la copie) constante (pour respecter les restrictions imposées par la fonction), c'est à dire, sous une forme proche de
auto const & _e = e.castBillboard();
Ensuite, je ne peux qu'être d'accord avec eugchriss : tu devrais avoir recours au double dispatch (éventuellement au patron de conception visiteur), si tu as des éléments qui ne sont pas tous de type élément billboard, par exemple, sous une forme qui pourrait être proche de
class Element{
public:
/* pour assurer la sémantique d'entité */
Element(Element const &) = delete;
Element & operator=(Element const &) = delete;
virtual ~Element() = default;
virtual void add(std::string const & id) = 0;
};
/* la fonction spécifique à l'ajout d'un casillboard */
void addCastillboard(std::string const & id, Box const & box, Color const &){
/*... */
}
/* l'élément qui convient :
class BillBoard : public Element{
public:
void add(std::string const & id) override{
addCastillboard(id, *this, text_.getImage());
}
private:
Text text_;
};
Cela t'évitera bien des soucis par la suite, je peux te l'assurer
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Tentative de référencement d'une fonction supprimé
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Eug