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++/CLI Discussion :

vector en variable d'instance


Sujet :

C++/CLI

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 23
    Par d�faut vector en variable d'instance
    Bonjour,
    je d�bute un peu en programmation orient�e objet et j'aimerais cr�er une variable d'instance qui soit un vector.

    Dans mon fichier .h j'�cris

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    private:
            std::vector<int> tableau;
    puis mon constructeur :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    tableau= new vector<int>();
    Mais il me dit que vector n'a pas �tait d�clar� alors que je fais #include <vector>

    Pouvez-vous m'aider svp ? merci

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2012
    Messages
    788
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 788
    Par d�faut
    Pour avoir un std::vector membre priv� d'une classe dont tu sp�cifies la taille au constructeur:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // TaClass.hpp
    // Ajouter les ifndef
    #include <vector>
     
    class TaClass
    {
    public:
        TaClass(unsigned int taille);
    private:
        std::vector<int> tableau;
    };
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    // TaClass.cpp
    #include "TaClass.hpp"
     
    TaClass::TaClass(unsigned int taille) : tableau(taille) { }
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // main.cpp
    #include "TaClass.hpp"
     
    int main()
    {
        TaClass test(4);
        // ...
        return 0;
    }

    De fa�on g�n�rale:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    std::vector<int> tableau(4);
    tableau.resize(10);
    fonctionne, pas besoin d'allocation dynamique (avec new)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 23
    Par d�faut
    �a marche, merci beaucoup Ehonn !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 23
    Par d�faut
    Bonjour,

    j'ai juste une autre question, j'aimerais passer par un pointeur pour faire �a, et ajouter une fonction pour ajouter un �l�ment dans le vecteur, voici mon code :

    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
     
    //fichier h
    class MaClass
    {
    	public:
    		MaClass();
    		void add(int i);
     
     
    	private:
            std::vector<int> *chaine;
    };
     
    //fichier cpp
    #include "MaClass.h" 
    #include <vector>
     
     
    using namespace std;
     
    MaClass::MaClass()
    {
        vector<int> temp;
        chaine = &temp; 
    }
     
    void MaClass::add(int i)
    {
        *chaine.push_back(i);
    }
    mais il me sort l'erreur
    18 `push_back' in `((MaClass*)this)->MaClass::chaine', which is of non-class type `std::vector<int, std::allocator<int> >*'
    Sans la fonction add le code ce compile bien, as-tu une id�e stp ?

    encore merci

  5. #5
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2012
    Messages
    788
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 35
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 788
    Par d�faut
    Il faut utiliser les pointeurs seulement lorsqu'on est oblig� !

    Ton membre priv� doit �tre
    et non
    Si tu ne veux pas donner de taille au constructeur celui ci sera tout simplement le constructeur par d�faut (mais tu peux �crire quand m�me ceci)
    Pour ta m�thode add, elle ressemblera �:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void MaClasse::add(int elem) { m.push_back(elem); }
    ---

    Ton constructeur est faux car:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    MaClass::MaClass()
    {
    vector<int> temp;
    chaine = &temp;
    }
    temp est construit, tu r�cup�res son emplacement m�moire dans chaine et temp est d�truit car il n'existe que dans le constructeur (car d�clarer dedans) et donc chaine pointe vers une adresse m�moire invalide !

    La solution (� �viter au maximum) est de faire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MaClass::MaClass()
    {
    chaine = new std::vector<int>();
    }
     
    MaClass::~MaClass()
    {
    delete chaine;
    }
    Celui qui alloue la m�moire doit la lib�rer. On �crit donc le destructeur qui va bien

    ---

    Si tu vraiment besoin d'avoir un pointeur
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    std::vector<int> * pVec = new std::vector<int>();
    pVec->push_back(5);
    (*pVec).push_back(-3);
    delete pVec;
    � �viter au maximum !

    ---

    [Aucun code test�]

Discussions similaires

  1. red�finition de variable d'instance
    Par swinger45 dans le forum Langage
    R�ponses: 8
    Dernier message: 27/09/2006, 18h34
  2. Collection et variable non instanci�
    Par david06600 dans le forum Langage
    R�ponses: 1
    Dernier message: 17/08/2006, 14h23
  3. Variable d'instance et classe anonyme
    Par zoullou dans le forum AWT/Swing
    R�ponses: 7
    Dernier message: 21/05/2006, 12h30
  4. [POO] Retrouver une variable d'instance de classe
    Par stailer dans le forum Langage
    R�ponses: 1
    Dernier message: 18/02/2006, 10h56
  5. "class" vector � indice variable et fonction membr
    Par icetechnik dans le forum C++
    R�ponses: 14
    Dernier message: 25/11/2005, 23h46

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