IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Erreur XCode + openFrameworks : Field type 'ROI' is an abstract class


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2013
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 35
    Points : 25
    Points
    25
    Par défaut Erreur XCode + openFrameworks : Field type 'ROI' is an abstract class
    Bonjour à toutes et à tous.

    Je suis confronté à une petit soucis sur openFrameworks 0.8.4 avec XCode 6.0.1 sous OSX Mavericks

    Dans mon header ROI.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <ofBaseTypes.h>
    #include <ofRectangle.h>
     
    class ROI : public ofBaseDraws, public ofRectangle {
     
        public :
     
        void draw(float _x, float _y) const;
        void draw(float _x, float _y, float _w, float _h) const;
        float getWidth() const;
        float getHeight() const;
    };
    La déclaration dans mon kinectTracker.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <ofxKinect.h>
    #include <ofxOpenCv.h>
    #include "ROI.h"
     
    class kinectTracker {
     
    public:
        kinectTracker();
        ~kinectTracker();
     
        ROI roi; // l'erreur apparait ici !
     
    private:
     
        ofxKinect kinect;
     
    };
    Cela me donne l'erreur :

    Field type 'ROI' is an abstract class
    Je ne comprend pas cette erreur !

    Si quelqu'un peut m'éclairer c'est top...

    Merci à vous.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 073
    Points : 12 119
    Points
    12 119
    Par défaut
    ROI est abstraite car elle n'est pas instanciable.
    Pourquoi n'est-elle pas instanciable ?
    Car des méthodes de ses classes mères ou ancêtres ne sont pas définies et qu'elles doivent l'être avant qu'une classe fille ou descendante de ces classes mères soient instanciables.
    Le compilateur devrait vous indiquer dans son message d'erreur les méthodes que la classe fille doit définir pour qu'elle soit instanciables.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Pense à donner (et lire) le message d'erreur en entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    kinectTracker.h:11:9: error: cannot declare field 'kinectTracker::roi' to be of abstract type 'ROI'
         ROI roi; // l'erreur apparait ici !
             ^
    ROI.h:4:7: note:   because the following virtual functions are pure within 'ROI':
      class ROI : public ofBaseDraws {
            ^
    ofBaseTypes.h:47:18: note:   virtual void ofBaseDraws::draw(float, float)
          virtual void draw(float x, float y)=0;
                       ^
    ofBaseTypes.h:68:18: note:   virtual void ofBaseDraws::draw(float, float, float, float)
          virtual void draw(float x, float y, float w, float h)=0;
                       ^
    ofBaseTypes.h:59:19: note:   virtual float ofBaseDraws::getHeight()
          virtual float getHeight()=0;
                        ^
    ofBaseTypes.h:60:19: note:   virtual float ofBaseDraws::getWidth()
          virtual float getWidth()=0;
                        ^
    D'après la documentation, la classe ofBaseDraws est une classe abstraite car elle possède quatre méthodes virtuelles pures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    virtual void 	draw (float x, float y)=0;
    virtual void 	draw (float x, float y, float w, float h)=0;
    virtual float 	getHeight ()=0;
    virtual float 	getWidth ()=0;
    Or dans ta classe ROI, tu définis quatre nouvelles méthodes de signature différente (le const à la fin est en trop)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void draw(float _x, float _y) const;
    void draw(float _x, float _y, float _w, float _h) const;
    float getWidth() const;
    float getHeight() const;
    Ton compilateur n'ayant pas les méthodes originales redéfinies considère que ta classe ROI est aussi abstraite, et ne peut donc être instanciée.

    Si tu compiles en C++11, pense à utiliser le mot-clé override :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ROI : public ofBaseDraws, public ofRectangle {
     
        public :
     
        void draw(float _x, float _y) const override;
        void draw(float _x, float _y, float _w, float _h) const override;
        float getWidth() const override;
        float getHeight() const override;
    };
    qui aurait pu te prévenir que tu ne redéfinissais pas des méthodes existantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ROI.h:8:10: error: 'void ROI::draw(float, float) const' marked override, but does not override
         void draw(float _x, float _y) const override;
              ^
    ROI.h:9:10: error: 'void ROI::draw(float, float, float, float) const' marked override, but does not override
         void draw(float _x, float _y, float _w, float _h) const override;
              ^
    ROI.h:10:11: error: 'float ROI::getWidth() const' marked override, but does not override
         float getWidth() const override;
               ^
    ROI.h:11:11: error: 'float ROI::getHeight() const' marked override, but does not override
         float getHeight() const override;
               ^
    Dernière modification par Invité ; 12/10/2014 à 20h36.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2013
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Bonsoir et merci beaucoup pour ta suggestion.

    Il me semble pourtant avoir ce qu'il faut notament pour ofBaseDraws : les méthodes virtuelles pures semblent pourtant ok dans ROI

    cf. détails de ofBaseDraws : http://ofxfenster.undef.ch/doc/classofBaseDraws.html

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2013
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 35
    Points : 25
    Points
    25
    Par défaut
    Oups ! j'avais pas vu la réponse !
    On a du répondre en même temps.
    Merci pour tous ces détails.

    Tout fonctionne maintenant.

    Merci beaucoup pour votre aide et vos précieux conseils.

    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-A] ADO - Erreur 13 Incompatibilité de Type
    Par db30 dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/04/2006, 14h30
  2. Réponses: 5
    Dernier message: 13/03/2006, 15h51
  3. [PHP MySQL] Erreur execution requête de type INSERT
    Par Pfeffer dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/01/2006, 17h38
  4. Erreur de conflit de type
    Par Jhulk dans le forum C
    Réponses: 15
    Dernier message: 16/01/2006, 15h47
  5. Erreur de conversion de type Null en String
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/07/2005, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo