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

Dev-C++ Discussion :

Problème avec ClassBuilder et Dev-C++


Sujet :

Dev-C++

  1. #1
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut Problème avec ClassBuilder et Dev-C++
    Bonjour à tous,

    J'essaie de me mettre au langage C++ pour créer un logiciel multiplateformes.

    J'ai choisi d'utiliser Dev-C++ comme EDI (version complète 4.9.9.2), et ClassBuilder pour gérer mes classes (version 2.4 (PR448) Alpha 1.86A).

    Pour faire mes premiers pas avec ClassBuilder, j'ai essayé de réaliser le "Quick Tour" présenté dans le document "ClassBuilder getting Started" disponible sur le site de ClassBuilder. La version de ce document date de 98, mais j'arrive quand même à m'y retrouver...

    J'ai donc créé une classe A et une classe B, avec une relation de 1 à n entre la classe B et la classe A (la classe A contient 0 à n classes B).

    J'ai récupéré le code généré dans Dev-C++, j'y ai fait les ajouts demandés, mais quand je compiles, j'obtient le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A.cpp:135:1: pasting "SortB" and "(" does not give a valid preprocessing token
     
    make.exe: *** [A.o] Error 1
     
    Exécution terminée
    "SortB" est une fonction créée automatiquement par ClassBuilder Dans l'objet A, qui permet probablement de trier les objets B contenus.

    Ce bug arrive à la ligne suivante de mon fichier "A.cpp" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Methods for the relation(s) of the class
    METHODS_MULTI_OWNED_ACTIVE(A, A, B, B)
    Est-ce que vous avez une idée de l'origine du problème ?
    Est-ce qu'il existerait une incompatibilité entre ClassBuilder et MingW ?
    (à moins que je ne me sois planté de version de ClassBuiler ?)

    Merci d'avance pour votre aide !

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Décidément j'y comprend rien...

    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    METHODS_MULTI_OWNED_ACTIVE(A, A, B, B)
    par
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    void A::AddBFirst(B* item)\
    {\
        METHOD_MULTI_ADDFIRST(A, A, B, B) \
    }\
    \
    void A::AddBLast(B* item)\
    {\
        METHOD_MULTI_ADDLAST(A, A, B, B) \
    }\
    \
    void A::AddBAfter(B* item, B* pos)\
    {\
        METHOD_MULTI_ADDAFTER(A, A, B, B) \
    }\
    \
    void A::AddBBefore(B* item, B* pos)\
    {\
        METHOD_MULTI_ADDBEFORE(A, A, B, B) \
    }\
    \
    void A::RemoveB(B* item)\
    {\
        METHOD_MULTI_REMOVE(A, A, B, B) \
    }\
    \
    void A::DeleteAllB()\
    {\
        METHOD_MULTI_DELETEALL(A, A, B, B) \
    }\
    \
    void A::ReplaceB(B* item, B* newItem)\
    {\
        METHOD_MULTI_REPLACE(A, A, B, B) \
    }\
    \
    B* A::GetFirstB() const\
    {\
        METHOD_MULTI_GETFIRST(A, A, B, B) \
    }\
    \
    B* A::GetLastB() const\
    {\
        METHOD_MULTI_GETLAST(A, A, B, B) \
    }\
    \
    B* A::GetNextB(B* pos) const\
    {\
        METHOD_MULTI_GETNEXT(A, A, B, B) \
    }\
    \
    B* A::GetPrevB(B* pos) const\
    {\
        METHOD_MULTI_GETPREV(A, A, B, B) \
    }\
    \
    int A::GetBCount() const\
    {\
        METHOD_MULTI_GETCOUNT(A, A, B, B) \
    }\
    \
    void A::MoveBFirst(B* item)\
    {\
        METHOD_MULTI_MOVEFIRST(A, A, B, B) \
    }\
    \
    void A::MoveBLast(B* item)\
    {\
        METHOD_MULTI_MOVELAST(A, A, B, B) \
    }\
    \
    void A::MoveBAfter(B* item, B* pos)\
    {\
        METHOD_MULTI_MOVEAFTER(A, A, B, B) \
    }\
    \
    void A::MoveBBefore(B* item, B* pos)\
    {\
        METHOD_MULTI_MOVEBEFORE(A, A, B, B) \
    }\
    \
    void A::SortB(int (*comp)(B*, B*))\
    {\
        METHOD_MULTI_SORT(A, A, B, B) \
    }
    Qui n'est en fait que le contenu de la macro.
    Et quand je compile le code, je n'ai plus d'erreur.
    Mais cette manip retire une bonne partie de l'intérêt de générer le code pas ClassBuilder (si il faut que je retouche le code généré à chaque fois...) !

    Il y a donc apparemment un problème de gestion des macros, non ?

    Savez-vous d'où peut venir le problèmes ?
    Est-ce que c'est MingW qui ne sait pas toujours bien s'en sortir avec les macros ?

    Merci pour vos réponses...

  3. #3
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bon, cette fois j'ai trouvé d'où venait le problème

    En fait, dans la définition de METHODS_MULTI_OWNED_ACTIVE(A, A, B, B), on trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ClassFrom::Sort##NameTo##(int (*comp)(ClassTo*, ClassTo*))\
    {\
        METHOD_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
    }
    En remplaçant ce code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ClassFrom::Sort##NameTo(int (*comp)(ClassTo*, ClassTo*))\
    {\
        METHOD_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
    }
    Tout rentre dans l'ordre ! (j'ai supprimé les ## après NameTo).

    Je n'y connais pas grand choses en macros. Est-ce que vous pouvez me confirmer qu'il y avait une erreur dans le code de la bibliothèque livrée avec ClassBuilder ?

    Si c'est le cas, je le signalerai sur leur site...

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    J'avais fini par laisser ClassBuilder devant son insistance à vouloir nous imposer son C++.

    La macro me parait effectivement bizarre. Peut-ête un problème de différence de comportement suivant les compilos? Ils n'en parlent sur la ML de l'outil ?

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Merci pour ta réponse

    La macro me parait effectivement bizarre. Peut-ête un problème de différence de comportement suivant les compilos? Ils n'en parlent sur la ML de l'outil ?
    Je n'avais pas trouvé la première fois que j'avais cherché... mais je ne savais pas vraiment ce que je cherchais !

    Mais maintenant, j'ai en effet trouvé des sujets qui parlent de problèmes avec les macros... Et ce qu'ils conseillent, c'est de faire "développer" les macros directement par ClassBuilder (menu "Project", "Settings", cocher "Expand Macros").

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

Discussions similaires

  1. [Débutant] Problème avec Dev-Cpp 4.9.9.0
    Par P4Pi dans le forum Dev-C++
    Réponses: 7
    Dernier message: 16/01/2010, 16h48
  2. Cherche C++ et problème avec Dev-C++
    Par abdelkaderg54 dans le forum Choisir un environnement de développement
    Réponses: 2
    Dernier message: 21/03/2007, 15h25
  3. Problème avec le type LVBKIMAGE sous DEV-C++
    Par ValyGator dans le forum Visual C++
    Réponses: 4
    Dernier message: 09/01/2007, 00h37
  4. [débutant] problème avec l'affichage des lettres sou dev-C++
    Par Antigonos Ier Gonatas dans le forum Dev-C++
    Réponses: 9
    Dernier message: 02/04/2006, 22h22
  5. [Dev-C++]Problème avec une file ...
    Par jobherzt dans le forum Dev-C++
    Réponses: 12
    Dernier message: 15/10/2005, 17h31

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