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 :

Probleme avec la classe vector


Sujet :

SL & STL C++

  1. #1
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut Probleme avec la classe vector
    Bonjour,

    J'ai une classe TActiveContainer:

    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
    template <class T>
    class TActiveContainer : public IActiveContainer
    {
    private:
        /////////////////////////////////////////////////////
        // private associations
        /////////////////////////////////////////////////////
        vector<IActiveObject*> elements;
        IActiveContainer* src;
     
    public:
        /////////////////////////////////////////////////////
        // public operations
        /////////////////////////////////////////////////////
        inline TActiveContainer();
    	/*inline TActiveContainer(const TActiveContainer &activeContainer);
        inline TActiveContainer& operator= (const TActiveContainer& activeContainer);*/
        inline void init(IActiveContainer* src);
        inline int size();
    .....
    };
     
    template <class T>
    TActiveContainer<T>::TActiveContainer()
    {
    	this->elements.clear();
    	assert(this->elements.size() == 0);
    	this->src = NULL;	
    }
     
    template <class T>
    void TActiveContainer<T>::init(IActiveContainer* src)
    {	
    	this->src = src;
    	this->elements.clear();
    	assert( this->elements.size() == 0 );
    }
     
    template <class T>
    int TActiveContainer<T>::size()
    {
        this->elements.size();
    }
    Quand je veux l'utiliser, je fais ceci:
    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
    	texte = "TActiveContainer: ";
    	Form1->Memo1->Lines->Add(texte);
    	TActiveContainer<TRegion*> list; 
     
    	texte = "list.size: "; 
    	texte += list.size();
    	Form1->Memo1->Lines->Add(texte); 
     
    	texte = "list.init: ";
    	Form1->Memo1->Lines->Add(texte);
    	list.init(NULL);
     
    	texte = "list.size: "; 
    	texte += list.size();
    	Form1->Memo1->Lines->Add(texte);
    Normalement, cela devrait marcher... mais non!
    Voici ce qu'il m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TActiveContainer: 
    list.size: 1242552
    list.init: 
    list.size: 1242552
    Comment se fait-il que mon vecteur ne soit pas vide?

    Ce qui est bizarre, c'est que cela se passe comme ceci sur un serveur COM que j'ai réalisé moi-même.

    Si je fais la même chose sur le programme client, cela marche très bien.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut.
    Qu'es ce que texte????

  3. #3
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Une AnsiString.
    Je tourne sous C++builder.

    Je ne pense pas que se soit ça qui plante.
    Je l'utilise toujours et ça marche à chaque fois.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par sylvain.cool Voir le message
    Une AnsiString.
    Je tourne sous C++builder.

    Je ne pense pas que se soit ça qui plante.
    Je l'utilise toujours et ça marche à chaque fois.
    Vue tes assert, ton code fonctionne et c'est ce que tu affiche qui est erroné

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Je ne connais pas AnsiString mais ça là :
    A mon avis ça ne transforme pas du tout magiquement un nombre en chaîne de caractères...

    MAT.

  6. #6
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Si je fais ceci :
    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
    	AnsiString texte;
    	int nbTmp;
     
    	texte = "TActiveContainer: ";
    	Form1->Memo1->Lines->Add(texte);
    	TActiveContainer<TRegion*> list; 
     
    	nbTmp = 123;
    	texte = "nbTmp: "; 
    	texte += nbTmp;  
    	Form1->Memo1->Lines->Add(texte); 
     
    	nbTmp = list.size();
    	texte = "list.size: "; 
    	texte += nbTmp;
    	Form1->Memo1->Lines->Add(texte); 
     
    	texte = "list.init: ";
    	Form1->Memo1->Lines->Add(texte);
    	list.init(NULL);
     
    	nbTmp = list.size();
    	texte = "list.size: "; 
    	texte += nbTmp;
    	Form1->Memo1->Lines->Add(texte);
    J'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TActiveContainer: 
    nbTmp: 123
    list.size: 1242584
    list.init: 
    list.size: 1242584
    Donc, ça a l'air de marcher.
    Mais effectivement, les assert montrent bien que la taille est à 0.

  7. #7
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Si je fais la même chose du côté de mon client, ça marche nickel (je rappelle que je fais ça dans un serveur DCOM).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TActiveContainer: 
    nbTmp: 123
    list.size: 0
    list.init: 
    list.size: 0

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Et si tu fais juste un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    texte = "nbTmp: "; 
    texte += std::vector<IActiveObject*>().size();
    Form1->Memo1->Lines->Add( texte );
    ?

    MAT.

  9. #9
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Peut tu voir les valeur en cour d'execution avec le debugger de C++builder??

    Compile tu les deux exe avec le même compilateur?

  11. #11
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Les 2 projets sont dans le même groupe (équivalent de la solution visual).

    Malheureusement, je ne peut pas utiliser le debugueur. Mon programme est un serveur .exe lancé par un client.

    J'ai essayé d'attacher un processus au debugueur, mais je n'ai que la correspondance CPU. Donc pas d'infos.

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Peut tu afficher des info sur une console avec cout??

  13. #13
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Ben non, j'ai pas de console.
    Juste une fenêtre vcl de C++Builder dans laquelle je peux écrire n'importe quoi (moyennant la technique que j'utilise).

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    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
    AinsiString texte;
    	int nbTmp;
     
    	texte = "TActiveContainer: ";
    	Form1->Memo1->Lines->Add(texte);
    	TActiveContainer<TRegion*> list; 
     
    	nbTmp = 123;
    	texte = "nbTmp: "; 
    	texte += nbTmp;  
    	Form1->Memo1->Lines->Add(texte); 
     
    	nbTmp = list.size();
    	texte = "list.size: "; 
    	texte += nbTmp;
    	Form1->Memo1->Lines->Add(texte); 
     
    	texte = "list.init: ";
    	Form1->Memo1->Lines->Add(texte);
    	list.init(NULL);
     
    	nbTmp = list.size();
    	texte = "list.size: "; 
    	texte += nbTmp;
    	Form1->Memo1->Lines->Add(texte);
    c'est vraiment ce que tu exécute ou y as des morceaux de code caché?

  15. #15
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Oui c'est vraiment ce que j'exécute (malheureusement).

  16. #16
    Membre éclairé Avatar de sylvain.cool
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Par défaut
    Aïe...

    Vous allez me maudire...

    Dans la fonction size() de TActiveContainer, il manquait le return!!!

    Par contre, c'est bizarre que ca marche d'un côté et pas de l'autre.

  17. #17
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par sylvain.cool Voir le message
    Vous allez me maudire...

    Dans la fonction size() de TActiveContainer, il manquait le return!!!
    lol. Est dire que c'était si simple...

    Citation Envoyé par sylvain.cool Voir le message
    Par contre, c'est bizarre que ca marche d'un côté et pas de l'autre.
    En faite, je pense que c'est plutôt une chance que tu est 0 dans l'autre...

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

Discussions similaires

  1. probleme avec la classe vector de java.util
    Par gtkmm dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 02/02/2010, 13h05
  2. probleme avec la classe vector
    Par elekis dans le forum Langage
    Réponses: 4
    Dernier message: 12/04/2006, 16h25
  3. Probleme avec la STL(vector) avec code C
    Par Benjy dans le forum SL & STL
    Réponses: 12
    Dernier message: 06/04/2006, 12h54
  4. Probleme avec une class template
    Par lenectar dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2006, 10h49
  5. probleme avec la classe calendar
    Par fatmax dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 04/10/2005, 17h04

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