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

Langage C++ Discussion :

Probleme de compilation erreur sur creation de l'objet


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Probleme de compilation erreur sur creation de l'objet
    Bonjour
    je ne suis pas un expert en c++
    je travaille sur un projet qui doit utiliser un API C++ QGIS
    dans mon application je veux creer une classe qui herite d'une classe de l'API pour y rajouter des fonctions spécifiques
    donc je crée un header file avec la definition de ma classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class CMyQgsSymbol : public QgsSymbolV2 { 
     
    public : 
             CMyQgsSymbol(); 
             ~CMyQgsSymbol(); 
     
    }

    et dans mon code de l'application je crée mon objet

    CMyQgsSymbol lSymbol = new CMyQgsSymbol();

    lors de la compilation j'ai ce message d'erreur :

    cannot allocate an object of abstract type

    dans la classe de l'API qgsymbolv2 il n'y a pas de constructeur , mais simplement un destructeur , apparement il s'agirait d'une classe statique
    mais dans ce cas comment je peux heriter de cette classe et en créer des objets ?

    Merci pour vos lumieres

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    En C++, un new ne peut fonctionner qu'avec un pointeur. Donc la ligne CMyQgsSymbol lSymbol = new CMyQgsSymbol(); est incorrecte, tu dois écrire CMyQgsSymbol *lSymbol = new CMyQgsSymbol();.
    En outre, si tu n'as pas besoin d'allocation dynamique tu peux simplement écrire CMyQgsSymbol lSymbol; ce qui est nettement plus simple et t'évite d'avoir à gérer la mémoire avec delete.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Daïmanu Voir le message
    Bonjour.

    En C++, un new ne peut fonctionner qu'avec un pointeur. Donc la ligne CMyQgsSymbol lSymbol = new CMyQgsSymbol(); est incorrecte, tu dois écrire CMyQgsSymbol *lSymbol = new CMyQgsSymbol();.
    En outre, si tu n'as pas besoin d'allocation dynamique tu peux simplement écrire CMyQgsSymbol lSymbol; ce qui est nettement plus simple et t'évite d'avoir à gérer la mémoire avec delete.
    autant pour moi c'est une erreur de frappe dans mon code il y a bien l'etoile
    helas j'ai besoin d'allocation dynamique
    en tout merci, je vais quand meme voir si je peux me passer de l'allocation dynamique

  4. #4
    Membre régulier
    Homme Profil pro
    Cocher moderne
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Oman

    Informations professionnelles :
    Activité : Cocher moderne

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Points : 118
    Points
    118
    Par défaut
    Bonsoir,

    Je ne connais pas la bibliothèque, mais ton compilateur semble te dire que CMyQgsSymbol est abstraite.
    Tu devrais donc trouver dans la définition de QgsSymbolV2, dont ta classe hérite, une méthode virtuelle pure à redéfinir.
    On les reconnait facilement, elle sont déclarées comme ça:

    Il n'y a pas de mot-clé en C++ pour définir une classe comme étant abstraite. Il faut simplement qu'elle ait une méthode virtuelle pure.

    Bon courage,

Discussions similaires

  1. [windev 11]erreur sur creation de repertoire
    Par nath-0-0 dans le forum WinDev
    Réponses: 12
    Dernier message: 20/01/2008, 19h54
  2. [Compilation] Erreur sur mysql.h et mysql_com.h
    Par Darkroro dans le forum C++
    Réponses: 1
    Dernier message: 27/03/2007, 09h42
  3. Probleme de compilation,erreur avec SAXParser
    Par makohsarah dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 07/01/2007, 14h35
  4. [Compilateur] erreur sur le lancement de la compilation
    Par wickramben dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/05/2005, 18h43
  5. [VB.NET] Erreur sur la creation dynamique d'une texbox
    Par headcooper dans le forum ASP.NET
    Réponses: 4
    Dernier message: 01/07/2004, 19h34

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