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

SL & STL C++ Discussion :

debutant : vector contenant des objects


Sujet :

SL & STL C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut debutant : vector contenant des objects
    Bonjour,

    J'ai une classe qui me permet d'extraire des données provenant d'un vecteur (qui contient des trames):
    5 données au total sont extraites de la trame à chaque fois;

    J'ai créé un object "TempGPRMCdata" appartenant à cette classe et un vecteur "GPRMCdataUsed"

    je voudrais ranger ces 5 données dans le vecteur, est ce qu'il est possible de faire :
    GPRMCdataUsed[i]=TempGPRMCdata;
    ou GPRMCdataUsed.push_back(TempGPRMCdata);

    ou avez vous une autre solution qui marche
    merci

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    bonjour,

    oui si ta classe définit l'opé =
    (pas besoin s'il n'y a pas de pointeurs parmi ses attributs)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    j'ai pas bien compris ce que tu voulais dire?

  4. #4
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Toto t1, t2;
    vector<Toto> tab(1);
    ...
     
    t1 = t2;
    tab[0] = t2;
    ce code est correct si :
    - soit Toto est un type simple (int, char...)
    - soit Toto est une classe dont les attributs les plus profonds sont simples
    (pas très formulé mais bon c'est l'idée)
    - soit Toto est une classe ayant éventuellement des attributs pointeurs, auquel cas il est nécessaire de définir l'opérateur d'affectation si l'on veut pouvoir copier (dupliquer) l'ensemble de l'objet.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    Merci je comprend mieux.
    J'ai fait les modifications , je compile , j'ai pas d'erreur mais au moment de l'execussion j'ai le message suivant:

    L'instruction "0x5f42b54d" emploie l'adresse mémoire "0x00000000". la memoire ne peut être "read".


    d'ou vient cette erreur?

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    besoin du code pour le savoir

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    ce code est correct si :
    - soit Toto est un type simple (int, char...)
    - soit Toto est une classe dont les attributs les plus profonds sont simples
    (pas très formulé mais bon c'est l'idée)
    - soit Toto est une classe ayant éventuellement des attributs pointeurs, auquel cas il est nécessaire de définir l'opérateur d'affectation si l'on veut pouvoir copier (dupliquer) l'ensemble de l'objet.
    Il est nécessaire, pour utiliser std::vector, que le type passé soit Assignable et CopyConstructible.

    L'instruction "0x5f42b54d" emploie l'adresse mémoire "0x00000000". la memoire ne peut être "read".


    d'ou vient cette erreur?
    Tu as probablement tenté d'accéder à un index de ton vecteur qui n'existe pas.
    Boost ftw

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    désolé je m'étais absenté

    voila mon code

    variable globale
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    vector<CFrame> goodFrame;
    vector<CGPRMCdata> GPRMCdataUsed;
    ///////////////////////////////////////
    dans le main
    .
    .
    .
    		for (size_t i=0, size=goodFrame.size() ; i < size ; i++)
    		{
    						TempDataGPRMC.ExtractDataFromFrame(goodFrame[i].GetData());
    	GPRMCdataUsed[1+i] = TempDataGPRMC;
    		}
     
    ///////////////////////////////////
    dans CGPRMC.H
     
    class CGPRMCdata  
    {
    public:
    	//Constructors
    	CGPRMCdata();
    	CGPRMCdata(const CGPRMCdata&);
     
    	//Destructor
    	~CGPRMCdata();
     
     
    	void ExtractDataFromFrame(CString);
     
    	CString nTime;
    	CString nLatitude;
    	CString nLongitude;
    	CString nOrientationLat;
    	CString nOrientationLong;
     
    };
     
    //////////////////////////////////
    dans CGPRMC.cpp
     
     
    void CGPRMCdata::ExtractDataFromFrame(CString AnalysedFrame)
    {
    	char step []=",";
    	int first=NULL;
    	int second=NULL;
     
    	first = AnalysedFrame.Find(step,second); // cherche la première ","
    	second = AnalysedFrame.Find(step,first+1);// cherche la deuxième ","
     
    	while (first!=-1 && second !=-1)
    	{
    		if(first==5 && second==15) // extraction de l'heure
    		{
    			nTime=AnalysedFrame.Mid(first+1,(second-first-1));
    		}
    		if(first==17 && second==25)// extraction de la latidude
    		{
    			nLatitude=AnalysedFrame.Mid(first+1,(second-first-1));
    		}
    		if(first==25 && second==27)// extraction de N ou S
    		{
    			nOrientationLat=AnalysedFrame.Mid(first+1,(second-first-1));
    		}
    		if(first==27 && second==36)// extraction de la longitude
    		{
    			nLongitude=AnalysedFrame.Mid(first+1,(second-first-1));
    		}
    		if(first==36 && second==38)// extraction de E ou W
    		{
    			nOrientationLong=AnalysedFrame.Mid(first+1,(second-first-1));
    		}
     
    		first = second; 
    		second = AnalysedFrame.Find(step,first+1); 
     
    	}
     
    }

    PAS D'ERREUR MAIS AU LANCEMEMENTJ'OBTIENS LE MESSAGE EVOQUE CI DESSUS;


  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut

    PAS D'ERREUR MAIS AU LANCEMEMENTJ'OBTIENS LE MESSAGE EVOQUE CI DESSUS;
    Ce message est un message d'erreur...
    Je suppose que tu voulais dire "Pas d'erreur de compilation"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    oui oui ,pas d'erreur de compilation mais quand le programme se lance j'ai une fenêtre qui se lance avec le message suivant

    L'instruction "0x5f42b54d" emploie l'adresse mémoire "0x00000000". la memoire ne peut être "read".

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Tu n'as pas l'air de comprendre que tu ne peux utiliser machin[i] que si machin est suffisamment grand.
    Si machin a une taille de 1, machin[1] peut produire une erreur, ou du moins un comportement indéfini.
    Boost ftw

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 18
    Points
    18
    Par défaut
    merci a tous problème résolu

    j'ai mis le temps mais ça y est.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 21/02/2014, 11h29
  2. Réponses: 10
    Dernier message: 10/10/2009, 18h39
  3. Lié un combobox avec une arryalist contenant des objects
    Par fab2050 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/11/2008, 10h47
  4. [Debutant] Exécution d'un batch contenant des chemins relatifs
    Par Goupsy dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 14/12/2007, 10h31
  5. parcourir ArrayList contenant des vectors
    Par imane_bennouna dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 04/08/2006, 10h56

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