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++Builder Discussion :

Sortir un typedef d'une classe


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Sortir un typedef d'une classe
    je m'adresse à vous pour une question en C++ qui se pose non pas avec Visual C++ ou GCC mais avec C++ Builder :
    Comment sortir le typedef suivant de la classe ??? merci d'avance (j'ai essayé template+typedef+class, il n'a pas aimé)

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef _DYNALISTE_H
    #define _DYNALISTE_H
     
    template<class type>
    class dynaliste							/* INDICE BASE 0 */
    {
    private:
    	typedef struct stockpoint {type * pointeur; };          // Structure encapsulant un element de la liste
    	inline void mem_Alloc(void);				// Allocation memoire pour le stockage des elements
    	bool isFreeAll;				
                   // Mis à true lors de l'appel à freeAll
    public:
    	[b]stockpoint * mzone;[/b]					// Pointeur sur la zone memoire stockant la liste
    							// Ce membre est public pour permettre aux classes dérivées

  2. #2
    Membre éprouvé
    Bonjour

    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
     
    #ifndef _DYNALISTE_H 
    #define _DYNALISTE_H 
     
    typedef struct stockpoint {type * pointeur; }; // Structure encapsulant un element de la liste 
     
     
    template<class type> 
    class dynaliste /* INDICE BASE 0 */ 
    { 
    private: 
    inline void mem_Alloc(void); // Allocation memoire pour le stockage des elements 
    bool isFreeAll; 
    // Mis à true lors de l'appel à freeAll 
    public: 
    stockpoint * mzone; // Pointeur sur la zone memoire stockant la liste 
    // Ce membre est public pour permettre aux classes dérivées


    Comme ça non ?
    Bien sur, ainsi stockpoint , qui était privée , devient global et il faut vérifier que ça ne pose pas de problème ailleurs ....

    cordialement
    O.Constans
    Ancien rédacteur Java/J2EE ,C++Builder

  3. #3
    Candidat au Club
    Perdu
    Perdu car le type n'est pas déclaré...

    et en remettant un autre template <class type> devant cela ne marche pas non plus


    A+ Yann

  4. #4
    Membre éprouvé
    oui, bon effectivement la definition de type est mal placée...
    essayez comme ça ...

    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
     
    #ifndef _DYNALISTE_H 
    #define _DYNALISTE_H 
     
    template<class type> 
     
    typedef struct st {type * pointeur; } stockpoint ; // Structure encapsulant un element de la liste 
     
     
    class dynaliste /* INDICE BASE 0 */ 
    { 
      private: 
      inline void mem_Alloc(void); // Allocation memoire pour le stockage des                                      elements 
    bool isFreeAll; 
     
    // Mis à true lors de l'appel à freeAll 
    public: 
    stockpoint * mzone; // Pointeur sur la zone memoire stockant la liste 
     
    // Ce membre est public pour permettre aux classes dérivées
    Ancien rédacteur Java/J2EE ,C++Builder

  5. #5
    Candidat au Club
    re-reperdu
    E2428 Les modèles doivent être des classes ou des fonctions      Erreur du compilateur
    La déclaration dans une déclaration de modèle doit spécifier un type de classe ou une fonction.

    Encore cet après-midi d'essai et puis j'essai autre chose (un autre moteur 3D mais sous licence LGPL ça ne court pas les rues)

    ou je reviens à Visual C++...

    Dire que ma boite a acheté Borland Pro pour essai.....je m'en tire trés mal de mon galop d'essai.....et chez Borland, je ne tombe que sur des personnes du marketing qui me donne des numéro de téléphone à 36000 chiffres..............Pire que chez Mickey$oft

  6. #6
    Membre régulier
    Mon avis c'est que le code est mal écris.
    Il ne faut pas jetter la pierre à Borland (la je suis un peu protectioniste mais bon ...).

    Le code ne respecte pas la norme donc evidement ça clash ...
    A ta disposition
    Christophe MERLIER

  7. #7
    Candidat au Club
    Essayons autre chose
    Oui, pas de pierre...quand je modifie l'option du compilateur et le met en norme ANSI et non BORLAND, cette erreur disparait mais il en trouve d'autre dans :

    Module Name: Winreg.h
    Abstract: This module contains the function prototypes and constant, type and structure definitions for the Windows 32-Bit Registry API.

    Bon, autre solution peut-être :
    -Chargement statique des .LIB en les ajoutant au projet (préalablement précompilé par VC++, donc pas d'INCLUDE .h)
    -Prototypage des fonctions de la DLL avec le modificateur __declspec (dllimport) comme dit page 7-12 du guide en français.

    Par contre, on peut jeté la pierre pour la doc qui, contrairement à JBuilder, fait un gros volume de 15cm d'épaisseur et non pas plusieurs.
    (j'en ai spiralé 7, ma table des matières est sur le 1er et l'index sur le dernier) dommage.

    A+ Yann
    Et encore merci mais définir une structure générique ne suffira pas à faire fonctionner ce moteur 3D sous Borland...à mon humble avis...de newbie

  8. #8
    Membre confirmé
    et si tu le laissait dans la classe en le déclarant public, ça peut pas aller ?

    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
    #ifndef _DYNALISTE_H 
    #define _DYNALISTE_H 
     
    template<class type> 
    class dynaliste /* INDICE BASE 0 */ 
    { 
    public: 
    typedef struct stockpoint {type * pointeur; }; // Structure encapsulant un private: 
    element de la liste 
    inline void mem_Alloc(void); // Allocation memoire pour le stockage des elements 
    bool isFreeAll; 
    // Mis à true lors de l'appel à freeAll 
    public: 
    stockpoint * mzone; // Pointeur sur la zone memoire stockant la liste 
    // Ce membre est public pour permettre aux classes dérivées
    };
    #endif

  9. #9
    Membre régulier
    J'ai voulu telecharger la librairie (18 Mo ... hum) et regarder.
    Le probleme c'est qu'un portage prend du temps et que je n'ai pas de temps pour ça.
    Il me semble que l'auteur est gentil (dixit je sais plus pourquoi j'ai fait ça mais je l'ai fait parce que comme ça ça marche ).
    Il faut je pense reconsidérer l'affaire de maniere plus large pour avoir une autre approche que : je compile, je ferme les yeux ... zut ça marche pas
    A ta disposition
    Christophe MERLIER

  10. #10
    Candidat au Club
    Mouais
    Moi aussi je suis gentil
    Stage de quatre mois pour faire un simulateur :
    - une semaine de cahier des charge
    - une semaine état de l'art
    - une semaine de tutoriels Borland
    - la 4ème je commence la maquette à rendre puis pssstt gros pépins
    sur la compile du moteur 3D...là est mon erreur

    Je ne suis que stagiaire et j'essais de m'adapter à l'environnement de l'entreprise qui elle est sous VC++, développe en C, mais voudrais changer et passer à C++ (il ont acheté une licence PRO juste pour voir)
    Mais au vu des "pépins" que j'ai, mon chef de service commence à lorgner vers VISUAL .NET
    Le service marketing de Borland est trés gentil mais les n° de téléphone fournis ne m'amènent à rien et je pense qu'il ne sont pas à une centaine de licences près.

  11. #11
    Membre éprouvé
    Bonjour,

    comme je l'ai dit, le portage d'appli vc++ , qui permet de faire beaucoup de chose non normalisées (donc non portables) , vers c++builder qui lui est beaucoup plus stricte question respect des règles du c++ n'est pas chose facile !

    Pour porter genesis3d de vc6 à c++builder il m'a fallu envirron 2 mois d'essais et de débogage....

    Si tu es pressé dans le temps et que tu veux travailler avec c++builder, utilise le portage de genesis3d que j'ai fait ...

    http://www.developpez.org/club/g3dbu...lder/Index.htm

    genesis 3d est un très bon moteur 3d gratuit, la seule contrainte est de laisser le logo annimé de genesis en 1èr écran et ensuite de publier toute modification apportée au moteur lui même (s'il y en a).

    Cordialement
    Olivier Constans
    Ancien rédacteur Java/J2EE ,C++Builder

  12. #12
    Candidat au Club
    Tu vas me sauver la vis...ou tout du moins mon stage....

    QUESTION :
    - dans mon "état de l'art" j'avais noté que Genesis 3D ne supportait pas NT.....
    - qu'il était gratuit pour une utilisation non-commerciale.....

    Or moi il me faut les deux...quoique je ne cherche pas à modifier le moteur. Mon projet est de faire un éditeur puis un simulateur de chaîne mécanisée..les colis se déplaçant....visite guidée de l'aire de stockage...etc... (warehouse quoi...)


    PS mon chef est enthousiaste de voir avec quelle célérité on développe une GUI sous BC++Builder.

    A+ Yann

  13. #13
    Membre éprouvé
    Ca devrait être faisable , mais..

    Genesis 3d ne supporte pas NT car il utilise directx version 6 minimum.

    NT ne supporte Dx v3 !

    Par contre Genesis devrait fonctionner sous W2000 (dx8) .

    Pour utiliser genesis sous nt, il faut utiliser le driver opengl (moins stable que le driver directx)

    De plus il faut avoir une carte graphique 3d sur le micro.

    Dans mon précédent boulot, j'ai utilisé genesis pour faire une visu en 3d d'un terminal à conteneur à partir des information stockée dans ine base de donnée as400.

    le système fonctionnait sous windows 98 et je l'avais développé en c++builder3 pro...


    cordialement
    O.Constans
    Ancien rédacteur Java/J2EE ,C++Builder

  14. #14
    Candidat au Club
    Et le prix? C'est gratuit pour une utilisation commerciale si on laisse le logo?
    J'ai vu ta page ...trés sympa

    La première chose que je vais faire ce soir est de compiler tout ça et lire la doc........
    Contrairement à ton terminal ... mon programme doit recevoir des infos presque en temps réels d'un automate concernant les colis en transit et les représenter sur l'écran (enfin du moins interpoler leur vitesse entre deux lecteurs code barre)

    Et dire qu'il y a 3 semaines, on m'aurait dit que j'utiliserais un logiciel 3D.......un stage JBuilder+Web+Apache+Tomcat+LDAP+MYSQL aurait été plus dans mes cordes....enfin....A+ Yann