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 :

Problème d'initialisation de vector, C++11


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut Problème d'initialisation de vector, C++11
    Salut!

    Je rencontre des soucis pour appeler une fonction-membre d'une classe, implémentée comme suit:
    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
    void MenuColonneCentree::SetContenu(vector<string> argCONTENU)
    {   int calc1(argCONTENU.size());
        options=(calc1-(calc1%2))/2;
     
        ligneSelectionnee=0; // Présélection de la première ligne
     
        for (int index(0); index < calc1; index++)
        {   texte[index].setString(argCONTENU[index]);
            posY[index]=(7-options+index)*hauteurTextePrincipal;
        }
     
        etatAnimation=false;
        etatExistence=true;
     
        #ifdef SUIVI
        cout << "MenuColonneCentree, SetContenu OK" << endl;
        #endif
    }
    L'appel est fait comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MenuColonneCentree_1.SetContenu({ "", "", "", "", "", "", "", "", "", "LOADING"+points });
    ATTENTION! "points" est de type string =D

    Mais le compilateur ne l'accepte pas.
    L'erreur associée à l'appel est la suivante: "error: no matching function tu call to 'MenuColonneCentre::SetContenu(<brace-enclosed initializer list<)'"

    Je suis en train de réécrire mon programme, et le problème vient peut-être d'ailleurs. Si vous pensez que mon appel est correct, alors je verrai ça après avoir terminé la réécriture.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 739
    Points : 3 627
    Points
    3 627
    Par défaut
    Cet appel est valide, quelle version du compilo ?

    Sinon, concernant le code (y a du mieux par rapport à avant), regroupe les variables texte et posY dans une structure commune.
    Quel intérêt aussi de mettre des entrées de menu vide ? Quel est le type de la variable texte et quel supposition y as-tu attaché (là je pense à une taille) ?

  3. #3
    Membre actif
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Points : 282
    Points
    282
    Par défaut
    Suivant les derniers posts j'ai vu que tu utilises codeblocks, donc je suppose que ton compilateur est MinGW sous Windows (ou GCC sous Linux), quoiqu'il en soit il faut que tu rajoutes dans les options de compilation ceci :

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Danny-k Voir le message
    Suivant les derniers posts j'ai vu que tu utilises codeblocks, donc je suppose que ton compilateur est MinGW sous Windows (ou GCC sous Linux), quoiqu'il en soit il faut que tu rajoutes dans les options de compilation ceci :
    Je me disais justement que le compilateur était peut-être mal configuré pour cette application.

    Est-ce que tu peux être un peu plus précis, s'il-te-plaît? En fait j'ai pas vraiment idée de ce que je dois faire pratiquement =)

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    il faut activer le C++11 à la compilation.

    Avec code::blocs, il faut aller cocher la case qui va bien dans les options de compilation.
    Normalement le menu est assez explicite.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    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 629
    Points : 10 554
    Points
    10 554
    Par défaut
    C'est quand même super précis: Danny-k te demande de rajouter la bascule "std" afin de spécifier à ton IDE quelle version du C++ tu veux utiliser

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par jo_link_noir Voir le message
    Sinon, concernant le code (y a du mieux par rapport à avant), regroupe les variables texte et posY dans une structure commune.
    Tu parles d'une "struct" à la C, ou d'autre chose? (et dans ce cas j'ai pas compris)

    Quel intérêt aussi de mettre des entrées de menu vide ?
    Dans cet exemple, il n'y a qu'une ligne visible, mais là elle est la cinquième d'une colonne de 5 lignes (dont 4 sont vides), ce qui la met plus ou moins bas sur l'écran. C'est un cas particulier; normalement la plupart des lignes sont remplies.

    Quel est le type de la variable texte et quel supposition y as-tu attaché (là je pense à une taille) ?
    Oui, pardon, tout ça est dans le constructeur de la classe. le type c'est sf::Text, et la taille est donnée par hauteur/13 (hauteur était la hauteur du moniteur, récupérée avec la classe sf::VideoMode). Tout ça fait partie de SFML.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par foetus Voir le message
    C'est quand même super précis: Danny-k te demande de rajouter la bascule "std" afin de spécifier à ton IDE quelle version du C++ tu veux utiliser
    using namespace std ? C'est ça une bascule?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    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 629
    Points : 10 554
    Points
    10 554
    Par défaut
    Citation Envoyé par Armulis Voir le message
    using namespace std ? C'est ça une bascule?
    non de gcc -std=c++11

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Ça ?

    Nom : DGimIaDfKoh_prntscrn_01.png
Affichages : 197
Taille : 55,5 Ko

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Oui c'est ça
    Find me on github

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Oui c'est ça
    Nan! C'est bon, c'est moi qui ai fait de la merde! xD
    Problème réglé, merci beaucoup.

    Les questions posées à jo_link_noir restent d'actualité (si ça peut m'aider, je prends =D)

  13. #13
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Armulis Voir le message
    Tu parles d'une "struct" à la C
    Une struct "tout court" (struct vient de C, mais c'est autant du C que du C++). En général, on utilise struct lorsqu'il s'agit d'un petit objet, mais c'est jsute une sorte de convention implicite, rien d'officiel.
    Et c'est bien dans ce sens-là que je comprend la remarque de jo_link_noir. L'idée étant de remplacer 2 tableaux (un pour texte et un pour posY) par 1 seul tableau dont les éléments seraient une structure qui contiendrait ces deux données. Quelque chose comme:
    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
    struct LocalizedText
    {
       sf::Text text;
       float posY; // float ou int, selon ce dont a besoin la SFML
       void Update( const std::string & txt, float pos_y )
       {
          text.setString(txt);
          posY = pos_y;
       }
    };
     
    class MenuColonneCentree
    {
    // ton code
     
       std::vector<LocalizedText> localized_text; // <- à la place des 2 tableaux text et posY
    };
    Ensuite tu fais passer tes paramètres de fonctions par référence constante plutôt que par copie, tu utilises les types qui vont bien, et ça va te donner une fonction qui ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void MenuColonneCentree::SetContenu(const vector<string> & argCONTENU)
    {   
        size_t calc1 = argCONTENU.size();
        options=(calc1-(calc1%2))/2;
     
        ligneSelectionnee=0; // Présélection de la première ligne
     
        for (int index(0); index < calc1; index++)
            localized_text[index].Update(argCONTENU[index],(7-options+index)*hauteurTextePrincipal);
     
       // etc.
    }
    C'est une façon plus orientée objet pour faire la même chose. L'approche objet consiste à créer des classes/structures qui résolvent des problèmes. Et il ne faut pas tomber dans le piège de l'approche "donnée": une classe n'a pas pour but de contenir des données, mais de résoudre des problèmes, ou de proposer un service (autre façon de dire la même chose). Contenir des données peut être un service, mais c'est un cas particulier. Dans le code que je te propose ci-dessus, la structure LocalizedText fournit des données, mais également un service (update), qui va s'occuper de mettre à jour ces données.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Etudiant en génie mécanique
    Inscrit en
    Mars 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant en génie mécanique

    Informations forums :
    Inscription : Mars 2011
    Messages : 146
    Points : 33
    Points
    33
    Par défaut
    Bien compris si "localized_text" est bien la structure dont tu parlais. Je vais revoir ça. Effectuvement, ça pourrait m'aider à éviter de traiter toutes les données une-à-une =D

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/02/2011, 18h09
  2. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  3. Problème d'utilisation de vector
    Par loupdeau dans le forum SL & STL
    Réponses: 12
    Dernier message: 28/02/2005, 12h05
  4. Comment initialiser un vector à sa création ?
    Par Clad3 dans le forum SL & STL
    Réponses: 7
    Dernier message: 10/12/2004, 15h01
  5. Pitié, aidez moi : Problème d'initialisation de postgreSQL
    Par ttalourd dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 16/11/2004, 12h10

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