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 :

Je sais le faire en c# mais en c++ imbriquation de classe tableau


Sujet :

C++

  1. #21
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Tu confonds encore plein de concept. Tu as un erreur de compilation ici: le compilateur de dis qu'il ne trouve pas le constructeur ClassStation::ClassStation(). Ce qui est normal vu que tu ne l'as pas défini ni implémenté.
    Est-ce que tu comprends le principe de constructeur en C++ (je ne sais pas si c'est si différent en C# ou non).

    Autre point, fixe une bonne fois pour toute tes noms de classes, paramètres et tout ça. C'est assez difficile à suivre vu que tu pars dans tous les sens.

  2. #22
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 567
    Points : 7 657
    Points
    7 657
    Par défaut
    Pour pouvoir créer un tableau le constructeur par défaut doit exister, ajoute dans la classe ClassStation
    ClassStation() {}

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    L'erreur est vraiment ici:
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main()
    {
        vector<ClassStation> ListOfStation(2);
        ListOfStation.resize(10);

    on construit un objet listofStation avec 2 set de parametres et on prépare la place pour 10 objets de ce type...
    impossible de lire... toujours l'erreur builder dans vector.cc ...
    Si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ClassStation Station1(2);
    ClassStation Station2(2);
    J'ai deux stations implémentées.... je pige pas...

  4. #24
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 559
    Points
    10 559
    Par défaut
    Et un truc comme cela , si dans un vector de 10 éléments, tu en as 2 d'initialisés, les indices sont 0 et 1 et non pas 1 et 2.

    À la position 2, tu as du "quelque chose"

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par darkman19320 Voir le message
    Tu confonds encore plein de concept. Tu as un erreur de compilation ici: le compilateur de dis qu'il ne trouve pas le constructeur ClassStation::ClassStation(). Ce qui est normal vu que tu ne l'as pas défini ni implémenté.
    Est-ce que tu comprends le principe de constructeur en C++ (je ne sais pas si c'est si différent en C# ou non).

    Autre point, fixe une bonne fois pour toute tes noms de classes, paramètres et tout ça. C'est assez difficile à suivre vu que tu pars dans tous les sens.
    Merci, je vais essayer de plus partir dans tout les sens....
    le constructeur c'est l'initialisation de l'object.
    La comme initialisation j'ai une allocation en mémoire pour mon vecteur ParaSet (de NbreParam). Ca veux dire qu'il va m'allouer en mémoire la taille de la classe avec une indexation vers son nom.
    ClassStation Station(2); //instancie une classe classstation avec deux paramètres portant le nom Station.
    Mais ici std::vector<ClassStation> Station(2); // devrait juste me créer une structure Station avec deux paramètres.
    et ensuite Station.resize(10) me crée la place en mémoire de 2 structure de station avec 2 paramètres chacune.... non?

  6. #26
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 968
    Points
    32 968
    Billets dans le blog
    4
    Par défaut
    Sérieusement, as-tu pensé à lire un peu de documentation parfois ?
    Citation Envoyé par lupus5 Voir le message
    Mais ici std::vector<ClassStation> Station(2); // devrait juste me créer une structure Station avec deux paramètres.
    Ca crée un vector de 2 éléments, avec appel au constructeur par défaut pour chacun.
    Citation Envoyé par lupus5 Voir le message
    et ensuite Station.resize(10) me crée la place en mémoire de 2 structure de station avec 2 paramètres chacune.... non?
    NON! Ca redimensionne le tableau pour maintenant contenir 10 éléments, en supprimant les superflus, ou en créant les manquants par un appel au constructeur par défaut.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #27
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 617
    Points : 30 639
    Points
    30 639
    Par défaut
    Salut,

    Je ne vais pas en rajouter une couche sur le fond (enfin, pas maintenant), mais déjà, le simple fait de choisir BCB 5.5 en 2016, ce n'est vraiment pas la meilleure des décisions que tu aurais pu prendre...

    En effet, ce compilateur était déjà vieux quand j'ai suivi mes cours (la version "actuelle" était BCB 6), si bien que, pour prendre un ordre de comparaison que tu pourras sans doute comprendre, c'est comme si tu voulais n'utiliser que la version 1 ou 1.1 du framework C# (et en réalité BCB55 est encore plus vieux que ces version du framework)...

    Alors, bon! tu as sans doute de très bonnes raisons pour vouloir travailler sur du matériel tellement ancien, car, j'ai du mal à imaginer que tu puisse sciemment prendre ce genre de décision alors que tu est susceptible de disposer de matériel récent

    A moins que tu ne t'étais pas rendu compte de ce si grand décalage temporel. Et, si tel est le cas, je tiens à te dire que C++ a énormément évolué depuis la sortie de BCB55, car on a vu passer successivement un technical report et deux normes mises à jour.

    Dés lors, à moins d'avoir vraiment de très bonnes raisons pour rester avec cette antiquité, peut être devrais tu réellement envisager de "moderniser" un tout petit peu ta suite d'outils . Je ne sais pas, moi... Je verrais bien l'utilisation de Qt (version 5.x) au lieu de la vcl et -- au choix -- du compilateur gcc5.9.x ou 6.x (qui vient d'être annoncée stable) ou de la suite d'outils proposée par VC++ 2015 (ne vas pas chercher plus ancien, le support des nouvelles normes n'était pas si bon que cela)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Merci! j'avais pas réalisé que c'était si vieux! Vous voyez maintenant depuis quand j'ai plus fait de c++ sérieusement...
    Par contre le gcc 5.9 je le trouve pas, sur gcc j'ai trouvé que la version 5.3.... ou 6.1 c'est stable?

    Merci!

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Sérieusement, as-tu pensé à lire un peu de documentation parfois ?

    Ca crée un vector de 2 éléments, avec appel au constructeur par défaut pour chacun.

    NON! Ca redimensionne le tableau pour maintenant contenir 10 éléments, en supprimant les superflus, ou en créant les manquants par un appel au constructeur par défaut.
    Merci pour ta réponse, t'avais raison je devait lire un peu...

    Voici donc le code du main():
    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
     
    #include <istream>
    #include <vector.h>
    #include "ClassStation.h"
    using namespace std;
     
    int main()
    {
    vector<ClassStation> station(4, ClassStation(5));//4 station de 5 paramètres
        station[0].Show_Hide = true;//assignation des valeurs quelques unes
        station[1].ParaSet[0].StartPosition =22;
        station[2].ParaSet[1].SignalSquare.Amplitude = 23;
        station[3].ParaSet[2].SignalSine.Amplitude = 66;
        int result1 = station[1].ParaSet[0].StartPosition;
        int result2 = station[2].ParaSet[1].SignalSquare.Amplitude;
        int result3 = station[3].ParaSet[2].SignalSine.Amplitude;
        cout << station[0].Show_Hide << endl;//impression des valeurs
        cout << result1 << endl;
        cout << result2 << endl;
        cout << result3 << endl;
    }
    fichier 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #include <vector.h>
    #ifndef ClassStation_H
    #define ClassStation_H
     
    class ClassStation
    {
        public:
            bool Show_Hide;
     
            struct ParametersSet
            {
                int StartPosition ;
                struct TypeSquare
                {
                    int Amplitude;
                    int Frequency;
                };
                struct TypeSine
                {
                    int Amplitude;
                    int Frequency;
                };
            TypeSquare SignalSquare;
            TypeSine   SignalSine;
            };
     
            vector<ParametersSet> ParaSet;//empty vector created
     
            ClassStation(int);//constructeur par défaut
            ~ClassStation();//destructeur
     
        protected:
     
        private:
    };
     
    #endif // ClassStation_H
    fichier cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <vector.h>
    #include "ClassStation.h"
     
    ClassStation::ClassStation(int NbreParam)
    {
        ParaSet.resize(NbreParam);//vector populated with NbreParam item
    }
    ClassStation::~ClassStation()
    {
     
    }
    Le destructeur n'est pas modifié puisqu'il est fait automatiquement.

    Merci à tous!

  10. #30
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Petit détail, pas très important, mais c'est histoire de ne pas prendre de mauvaises habitudes : Quand le constructeur ne fait rien (ce qui hors cas d'une classe de base est le cas dans 99% des situations), il vaut mieux ne rien mettre que mettre un destructeur vide : Moins de boulot, et en plus ton code tournera plus vite (désolé, ça serait un peu long et embrouillant vu là où tu en es dans ton apprentissage d'expliquer pourquoi).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  11. #31
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Merci j'en prend note!

  12. #32
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 617
    Points : 30 639
    Points
    30 639
    Par défaut
    Citation Envoyé par lupus5 Voir le message
    Merci! j'avais pas réalisé que c'était si vieux! Vous voyez maintenant depuis quand j'ai plus fait de c++ sérieusement...
    Par contre le gcc 5.9 je le trouve pas, sur gcc j'ai trouvé que la version 5.3.... ou 6.1 c'est stable?

    Merci!
    Pardon, je me suis trompé de chiffre ...

    N'importe quelle distribution récente de linux va travailler au minimum avec la version 4.9.2.
    Sur TDM, tu pourras trouver la version 5.1.0 de Gcc compilée pour windows, mais la version stable "officielle" est la version 6.1.0

    Si je ne dis pas de bêtise, la grosse différence entre les version 4.9.x et les versions 5.x vient du fait que le support de C++14 n'est encore que "expérimental" avec la version 4.9, alors qu'il est "stable" dans la version 5.x.

    Quant à la différence entre les versions 5.x et 6.x, elle est essentiellement due à la norme respectée par défaut : C++98 pour 5.x et c++14 pour la version 6.x.

    Il est, enfin, tout à fait possible de compiler Gcc sous windows, mais comme il y a pas mal de prérequis à compiler avant d'y arriver, et que le code source de Gcc est ... relativement imposant, cela prend littéralement des plombes, pour y arriver

    Donc, oui : la version stable "officielle" est bel et bien la version 6.1, mais les version 5.x sont parfaitement utilisables (et faciles à trouver pour windows). La seule différence entre les deux tenant à la norme respectée par défaut

    Ceci étant dit, il est -- à mon humble avis -- dommage de se limiter au support de la norme C++98; les normes récentes ayant apporté pas mal de fonctionnalités des plus sympa
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2011
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Merci koala
    Comme le header <chrono> de la librairie Time qui nous oblige plus à coder un timer 😊
    Merci pour toutes ces infos!!

  14. #34
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 617
    Points : 30 639
    Points
    30 639
    Par défaut
    Citation Envoyé par lupus5 Voir le message
    Comme le header <chrono> de la librairie Time qui nous oblige plus à coder un timer 😊
    Merci pour toutes ces infos!!
    Et encore, je pensais à bien d'autres choses, comme
    • l'inférence de type (le mot clé auto)
    • les range based loops (for(auto const & i : collection) )
    • les pointeurs intelligents (adaptés de boost)
    • les générateurs aléatoires (adaptés de boost)
    • les type_traits (y en a un paquet de nouveaux)
    • le static_assert
    • les expressions lambda
    • les fonctions membres marquée default et delete
    • j'en oublie tout plein ...

    De manière générale, on ne code absolument plus du tout de la même manière depuis que C++11 est sorti et C++14 n'a fait qu'accentuer les choses
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Je ne sais pas faire une addition ?
    Par sam80 dans le forum Delphi
    Réponses: 8
    Dernier message: 18/04/2007, 15h13
  2. comment faire un "like MAIS différent de"
    Par cortex024 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/03/2007, 16h32
  3. Faire une addition, mais à l'horizontal
    Par deejay2221 dans le forum Access
    Réponses: 4
    Dernier message: 10/06/2006, 08h56
  4. Réponses: 1
    Dernier message: 19/02/2006, 19h52

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