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 :

vector dans un constructeur?


Sujet :

C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut vector dans un constructeur?
    Bonjour tous,

    j'ai des petits soucis pour générer des objets qui contiendrait en attribut des vector (tableau dynamique).

    1°) j'ai une fonction où je mets des string et des int dans deux vector:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DDD.push_back( "ici il y a des string" );
    CCC.push_back( "ici il y a des int" );
    2°) dans cette même fonction je fais appel à une class pour faire un objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AAAList.push_back(AAA(AAAName,BBB,CCC,DDD)
    3°) voici la definition de la classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class AAA
    {
            public:
                    AAA(std::string,const double,std::vector,std::vector);
                    ~AAA();
     
            private:
                    std::string AAAName;
                    double BBB;
                    std::vector CCC;
                    std::vector DDD;
    };
    Mon problème:
    je sais bien que ce code est faux car je l'ai testé mais je ne comprend pas comment m'y prendre

    mes test:
    - en premier j'ai essayer de faire un objet de facon classique avec des int, double et string et la pas de problèmes
    - par contre quand il s'agit de mettre des vector ca ne fonctionne plus

    ==> J'ai essayer de mettre dans le constructeur à la place de std::vector le type de variable contenu dans mes vector: int ou string mais ce ne fonctionne toujours pas....

    Pourriez vous m'expliquer comment faire ce que je souhaite où me renvoyer vers un lien qui donne un exemple

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Salut,
    Il faut commencer par préciser le type que contient ton vector. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::vector<int> CCC; // CCC vecteur d'entiers
    std::vector<string> DDD; // DDD vecteur de chaines
    Il ne faut pas non plus oublier en début de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <string>
    #include <vector>
    Ce serai un bon debut...

    Tape 'vector' 'stl' sur google et tu as, entre autre :
    http://www.cplusplus.com/reference/stl/vector/
    http://www.sgi.com/tech/stl/Vector.html
    ...
    Bon code.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    salut,
    Citation Envoyé par bertry Voir le message
    Il faut commencer par préciser le type que contient ton vector. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::vector<int> CCC; // CCC vecteur d'entiers
    std::vector<string> DDD; // DDD vecteur de chaines
    Il ne faut pas non plus oublier en début de fichier :
    [code]
    d'accord, en fait j'avais essayer soit l'un soit l'autre mais jamais les 2 (vector+type de données dans le vector)....
    je vais voir cela.

    Citation Envoyé par bertry Voir le message
    je vais jeter un oeil a cela

    Au fait c'est quoi la STL j'entends toujours parler de cela?


    merci beaucoup d'avoir pris le temps de repondre

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    j'ai essayé et ca fonctionne, il fallait bien mettre en plus de la classe le type de données du vector

    merci de ton aide c'est très gentil

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    au fait il y a quelque chose que je n'ai jamais fait mais que je risque d'avoir besoin :

    comment faire une methode qui me renvoi le vector?

    Je m'explique, dans la class AAA j'ai par exemple une methode qui me renvoi un double qui s'ecrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double AAA::get_blabla() const
    {
         return blabla;
    }
    c'est plutot classique, mais si je veux renvoyer un vector, ca ne va pas fonctionner avec return:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vector <string> Precipitate::get_stringArray()
    {
        return stringArray;
    }
    donc comment faire? surtout que je ne connais pas la taille du vector au préalable donc je ne peux pas faire autant de méthode que de ligne.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 23
    Par défaut
    Salut,

    En fait si ça fonctionne, regarde le code suivant marche à merveille :
    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 <iostream>
    #include <vector>
     
    std::vector<int> fillVector(void)
    {
     
    	std::vector<int> res;
    	for(int i = 0 ; i < 10 ; i++)
    	{
    		res.push_back(i);
    	}
    	return res;
    }
     
    int main (int argc, char * const argv[]) {
        std::vector<int> res = fillVector();
     
    	std::cout << "Taille : " << res.size() << std::endl;
    	return 0;
    }
    J'ai bien ma console qui écrit : "Taille : 10"

    Cordialement,



    ------------------
    Adrien BARRAL
    REETI's development team
    http://www.reeti.fr

  7. #7
    Invité
    Invité(e)
    Par défaut
    Retourner un std::vector<std::string> ne pose pas de problème, on peut renvoyer des objets de n'importe quel type pourvu qu'il ait un constructeur de copie D'autre part évite de dire "ça ne fonctionne pas" ou autre phrase du meme genre, et précise plutot si tu as une problème de compilation/linkage/éxécution. Dans les deux premiers cas rajoute aussi le message d'erreur, il est permet de localiser le problème.
    Dans ton cas voici quelques erreurs possibles :
    *tu utilises les classes std::vector et std::string, as-tu vérifié que tu avais bien un using namespace std ou using std::string quelque part?
    *tu retournes un objet nommé stringArray, est-t-il accesible par ta fonction(c'est-à-dire si il est déclaré dans ta fonction ou dans ta classe) ?
    *toujours à propos de stringArray, est-il du type std::vector<std::string> ?

  8. #8
    Membre chevronné

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Par défaut
    Salut 21did21,

    La STL ( Standard Template Librairy ), c'est une bibilothèque du c++, elle contient différents trucs utiles comme la classe 'vector' entre autre. 'vector' n'est pas une instruction du C++, c'est une classe toute faite, prête à l'emploi, dans la STL... Si tu te met sérieusement au C++ il faut un peu connaitre la STL. Il y a aussi d'autres bibliothèques comme OpenGL, Boost, Qt ... et bien d'autres...

    Regarde là pour la STL : http://cpp.developpez.com/cours/stl/

    Et regarde là pour d'autres bibliothèques : http://cpp.developpez.com/cours/?page=bibliotheques

    Have fun...

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    ah oui en effet ca fonctionne,

    c'est une erreur de ma part, j'ai oublié de mettre les prototype dans le .h

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    merci tous pour votre aide

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    Citation Envoyé par bertry Voir le message
    Salut 21did21,

    La STL ( Standard Template Librairy ), c'est une bibilothèque du c++, elle contient différents trucs utiles comme la classe 'vector' entre autre. 'vector' n'est pas une instruction du C++, c'est une classe toute faite, prête à l'emploi, dans la STL... Si tu te met sérieusement au C++ il faut un peu connaitre la STL. Il y a aussi d'autres bibliothèques comme OpenGL, Boost, Qt ... et bien d'autres...

    Regarde là pour la STL : http://cpp.developpez.com/cours/stl/

    Et regarde là pour d'autres bibliothèques : http://cpp.developpez.com/cours/?page=bibliotheques

    Have fun...
    merci pour ces complements! (en fait j'utilisai la stl sans le savoir...)

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Citation Envoyé par 21did21 Voir le message
    comment faire une methode qui me renvoi le vector?
    franchement, je te le déconseille car tu auras une recopie temporaire. Pour ma part, si je veux "renvoyer" un vecteur, je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void mafonction(std::vector<int> & v)
    {
      v.clear();
      ici tu faits tout ce que tu veux sur ton vecteur
    }
    De plus, ce n'est pas la même chose d'avoir une fonction qui fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void mafonction(const std::vector<int> & v)
    (pas de recopie de v) et une autre qui fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void mafonction(std::vector<int> v)
    (il y a une recopie de v)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/10/2006, 18h51
  2. [Vector] Ajouter un Vector dans un autre Vector
    Par VinceFromBcn dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 30/06/2004, 21h54
  3. [ Vector Fichier ] Vector dans fichier texte
    Par geegee dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2004, 13h56
  4. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 12/05/2004, 13h30
  5. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52

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