Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] Erreur de NonCopyable à l'initialisation d'un objet.  (Lu 2330 fois)

0 Membres et 1 Invité sur ce sujet

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Bonjour/bonsoir.

J'espère ne pas m'être trompé de sous forum mais je pense que non.

Voilà mon problème:
J'ai deux classes, une classe Character (pour personnage) et une classe Weapon (pour l'arme), elles héritent toutes les deux des classes sf::Drawable et sf::Transformable, et Weapon est inclue dans Character.
Si je compile comme ça, aucune erreur, tout va bien.
Maintenant, si j'ajoute un attribut Weapon à la classe Character (même si je ne l'utilise pas du tout dans la classe, juste pour tester donc) j'ai ces erreurs :

Voilà une partie du code pour mieux visualiser :
class Weapon : public sf::Drawable, public sf::Transformable
{
    public:
        Weapon();
        virtual ~Weapon();
        /*
        Des méthodes
        */

    private:
        virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
        /*
        Des attributs
        */

};

#include "Weapon.h"
class Character : public sf::Drawable, public sf::Transformable
{
    public:
        Character();
        virtual ~Character();
        /*
        Des méthodes
        */

    private:
        virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
        /*
        Des attributs
        */

        Weapon m_charWpn; //Si je l'enlève, tout compile bien comme il faut, si je le laisse, les erreurs arrivent
};

Est-ce que l'erreur pourrait venir du fait que les deux classes ont une méthode virtuelle de draw ?
Sinon d'où pourrait-elle venir ?

Merci d'avance!
« Modifié: Avril 24, 2014, 07:04:36 pm par Borax Kid »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur de NonCopyable à l'initialisation d'un objet.
« Réponse #1 le: Avril 24, 2014, 04:08:57 pm »
sf::RenderTexture est non-copiable. Ce qui fait de Weapon une classe non-copiable. Ce qui fait de Character une classe non-copiable. Or dans ton programme tu fais une copie d'instance de Character (sûrement involontairement, de manière implicite).
« Modifié: Avril 24, 2014, 06:34:09 pm par Laurent »
Laurent Gomila - SFML developer

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : Erreur de NonCopyable à l'initialisation d'un objet.
« Réponse #2 le: Avril 24, 2014, 04:26:35 pm »
C'est dans Weapon que j'ai un RenderTexture, comment faire pour avoir un objet Weapon dans Character alors?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur de NonCopyable à l'initialisation d'un objet.
« Réponse #3 le: Avril 24, 2014, 06:33:51 pm »
Il faut juste ne pas copier les choses qui ne doivent pas l'être. Or généralement il n'est pas logique de copier un personnage (Character) ; en effet cela signifierait quoi ? D'autant plus que tu ne fais certainement pas cette copie volontairement. Définir correctement la sémantique de ses classes, puis s'y tenir (avec l'aide du compilateur si possible) est très important. Ca évite de faire n'importe quoi, comme ici.
Laurent Gomila - SFML developer

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : Erreur de NonCopyable à l'initialisation d'un objet.
« Réponse #4 le: Avril 24, 2014, 06:35:32 pm »
Il n'y a pas de RenderTexture dans Character, c'est pas lui que je copie, c'est Weapon (qui lui contient un attribut RenderTexture).

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Erreur de NonCopyable à l'initialisation d'un objet.
« Réponse #5 le: Avril 24, 2014, 07:03:05 pm »
Je ne fais que lire le message d'erreur, qui indique clairement que la copie démarre avec un Character. Pour être exact, il y a à la fois une copie et une affectation. Comme je te l'ai dit, elles peuvent être très bien cachées et difficiles à trouver.
Laurent Gomila - SFML developer

Borax Kid

  • Newbie
  • *
  • Messages: 21
    • Voir le profil
Re : Erreur de NonCopyable à l'initialisation d'un objet.
« Réponse #6 le: Avril 24, 2014, 07:04:25 pm »
Ah ok, bon ben j'ai fait autrement et ça marche, sans le RenderTexture.
Merci.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Erreur de NonCopyable à l'initialisation d'un objet.
« Réponse #7 le: Avril 24, 2014, 08:29:03 pm »
T'as juste contourné le problème, il reviendra sans doute bientôt sous une autre forme. Il ne faut pas avoir peur de se confronter une bonne fois pour toutes aux choses qu'on ne maîtrise pas forcément ;)
Laurent Gomila - SFML developer