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 :

Passage d'un vecteur en paramètre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Par défaut Passage d'un vecteur en paramètre
    Bonjour,

    J'ai deux classes, form1 et form2, dans ma classe form1 j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class form1
    {
    vector<UnicodeString>* v_local ;
    ................
    .....
    }
    form1::form1(TComponent* Owner,vecor<UnicodeString*v)
    {
    v = v_local ;
     
    //traitement
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall form1::Button1Click(TObject *Sender)
    {
    v_local->push_back( // la je vais remplir le vecteur)
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    form2::Button1Click(TObject *Sender)
    {
    form1 *f = new form1(this,vector<UnicodeString>* v)
    this->memo->add(v);
    }
    l'idée est de récupérer une liste de vecteur pour l'utiliser dans la fonction Button1Click
    Je ne sais pas si ce que j'ai fait est correct ou pas, de toute façon ça me renvoie des erreurs

    Quelqu'un pourrait'il m'aider s'il vous plait

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Salut!
    Pour t'aider il nous faut...les messages d'erreur!
    Concernant le code que tu nous montres, je ne pense pas que l'utilisation du pointeur soit indispensable, et je pense qu'elle est susceptible de te compliquer la vie (gestion de la mémoire).
    De deux choses l'une:
    • soit ton vector représente uniquement la saisie de ton formulaire -> une des form en est propriétaire, elle a directement le vector (et non un pointeur) comme variable-membre, et l'autre (qui ne fait qu'agir dessus) en reçoit une référence
    • soit ton vector représente 'ton modèle' c'est à dire les données manipulées par la logique applicative (qui n'est PAS l'interface graphique). Alors, chaque form reçoit une référence à ton vector (au pire), soit encore mieux, elle reçoit une référence d'un objet (contrôleur) qui a des fonctions pour recevoir des string issues de la saisie.

    Dans l'un comme l'autre cas la manipulation d'un pointeur (donc d'un vector alloué dynamiquement) n'est pas utile et ne t'apporteras que du travail (et potentiellement des problèmes) superflu.

  3. #3
    Membre actif
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 66
    Par défaut
    Soit j'utilise les pointeurs ou pas, j'ai toujours la même erreur c'est dans la création d'objet f dans form2 qu'il me renvoie le curseur quand je compile.

    [BCC32 Erreur] form2.cpp(1761): E2108 Utilisation impropre de typedef 'vector<UnicodeString,allocator<UnicodeString> >'


    Ma question est ce qu'on peut passer des objets via le constructeur, ça veut dire que dans l'initialisation de l'objet, je passe dans le paramètre de constructeur ma liste de vecteur qui est chargé dans form1

    J'ai choisi les pointeur vu que j'ai pas une taille fixe des valeurs enregistrés, si vous voulez mon vecteur enregistre les items sélectionnés d'un composant TreeView pour que je puisse les affichés dans une memo ( memo déclaré dans form2

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Par défaut
    Citation Envoyé par belfort90 Voir le message
    [BCC32 Erreur] form2.cpp(1761): E2108 Utilisation impropre de typedef 'vector<UnicodeString,allocator<UnicodeString> >'
    Une rapide recherche m'indique que c'est un problème de compat entre c++ builder et les templates, je n'arrive pas à mettre la main sur la solution, si quelqu'un l'a?

    Citation Envoyé par belfort90 Voir le message
    Ma question est ce qu'on peut passer des objets via le constructeur,
    oui, définitivement (là ce n'est pas un objet que tu passes, ceci dit, mais un pointeur.). Par contre par défaut passer un objet veut dire qu'il sera copié ce n'est pas forcément la meilleure solution (passage par référence type std::vector<UnicodeString> & strings, depuis le propriétaire du vector en question)

    Citation Envoyé par belfort90 Voir le message
    J'ai choisi les pointeur vu que j'ai pas une taille fixe des valeurs enregistrés, si vous voulez mon vecteur enregistre les items sélectionnés d'un composant TreeView pour que je puisse les affichés dans une memo ( memo déclaré dans form2
    Tu confonds les choses. Le type std::vector est précisément fait pour gérer la taille variable, pas besoin de créer un nouveau vector chaque fois que tu veux changer sa taille. Donc, définitivement, utilises des objets directement, pas des pointeurs, ça t'évitera une consommation abusive d'aspirine

Discussions similaires

  1. [FLASH 8] Pb passage d'une fonction en paramètre
    Par segphault dans le forum Flash
    Réponses: 2
    Dernier message: 17/02/2006, 11h14
  2. Passage de tableau dynamique en paramètre
    Par Didier L dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2005, 23h04
  3. Passage d'une requete en paramètre dans un delete
    Par jlamazou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/08/2005, 17h58
  4. Réponses: 6
    Dernier message: 26/07/2005, 10h20
  5. Réponses: 7
    Dernier message: 18/05/2005, 15h09

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