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 :

Constructeur pour classe vecteur


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Constructeur pour classe vecteur
    Bonjour tout le monde !

    Voila je commence le C++ en cours et j'ai un exercice ou je dois faire:

    -un contructeur par défaut
    -un autre constructeur qui initialise le vecteur avec des zeros
    -un constructeur par copie
    -un destructeur

    j'ai fait mes lignes de codes mais j'ai une erreur et je vois pas comment la résoudre.

    voici le fichier header
    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
     
    using namespace std;
     
    class vecteur
    {
     private :
      int size; 
      double* p;
     public :
      vecteur() {size=0;}//contructeur par défaut
      vecteur(int);
      vecteur(const  vecteur& v);
      ~vecteur();
    };
     
    vecteur :: vecteur(int taille)
    {p=new double[taille=size];
      for (int i=0 ;i<taille ;i++)
        p[i]=0;}
     
     
    vecteur :: vecteur(const  vecteur& v)
    { p=new double[size=v.size];
      for (int i=0 ;i<size; i++)
        p[i]=v[i];}
     
        vecteur :: ~vecteur()
        {delete[] p;}
     
    void vecteur :: affiche()
    { for (int i=0; i<size; i++)
        cout << p[i] <<"";
        cout << "\n";}
    Et ici mon fichier .cpp (juste pour tester la compilation)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <iostream>
    #include "vecteur.h"
     
     
    using namespace std;
     
    int main()
    { 
        vecteur a(3);
        a.affiche();
        return(0);
     
    }
    J'ai un probleme qui m'indique un no match pour [] et pas de void pour le dernier .

    pouvez vous m'indiquer l'erreur dans mon code et m'expliquer le pourquoi du comment?

    P.S:Je suis un noob en C++(en programmation en général) et je viens de commencer il y a deux jours.

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Salut!
    Tu as oublié de déclarer ta fonction "affiche" dans ta classe "vecteur".
    Puisque tu commences le C++, je te conseille de prendre tout de suiste de bonnes habitudes concernant la lisibilité de ton code.
    Voilà comment je l'aurais écrit :
    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
     
    using namespace std;
     
    class vecteur
    {
    private :
    	int m_size; 
    	double * m_p;
     
    public :
    	vecteur();
    	vecteur( int);
    	vecteur( const vecteur & v);
    	~vecteur();
     
    	void affiche();
    };
     
    vecteur :: vecteur()
    {
    	m_size = 0;
    	m_p = NULL;// Important car si ce n'est pas fait, ça plantera dans ton destructeur
    }
     
    vecteur :: vecteur( int taille)
    {
    	m_size = taille;
     
    	if (m_size > 0)
    	{
    		m_p = new double[m_size];// Tu avais fait une erreur ici : taille=m_size
     
    		for (int i = 0 ; i < m_size ; i++)
    		{
    			m_p[i] = 0;
    		}
    	}
    	else
    	{
    		m_size = 0;
    		m_p = NULL;
    	}
    }
     
     
    vecteur :: vecteur(const  vecteur& v)
    {
    	m_size = v.m_size;
     
    	if (m_size > 0)
    	{
    		m_p = new double[m_size];
     
    		for (int i = 0 ; i < m_size ; i++)
    		{
    			m_p[i] = v[i];
    		}
    	}
    	else
    	{
    		m_size = 0;
    		m_p = NULL;
    	}
    }
     
    vecteur :: ~vecteur()
    {
    	delete [] m_p;
    }
     
    void vecteur :: affiche()
    {
    	for (int i = 0 ; i < m_size ; i++)
    	{
    		cout << p[i] << ";";
    	}
     
    	cout << "\n";
    }
    Pour ton constructeur initialisant à 0, tu as aussi une autre méthode, je te conseille de voir la documentation de la fonction 'memset' (google est ton ami pour ça ^^).
    Enfin, il est conseillé de mettre l'implémentation de la classe dans un .cpp plutôt que dans un .h (à part certains cas particuliers, tu verras plus tard quand on te parlera de 'template'). Ca permet de ne pas avoir à tout recompiler si tu modifies l'implémentation d'une fonction.

  3. #3
    Membre expérimenté

    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
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Citation Envoyé par dragonjoker59 Voir le message
    je te conseille de prendre tout de suiste de bonnes habitudes concernant la lisibilité de ton code.
    Il faut aussi utiliser la liste d'initialisation.

    MAT.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci pour ces éléments de réponse.

    Je vais trés certénement revenir d'ici peu de temps

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

Discussions similaires

  1. constructeur pour classe abstraite
    Par manguigs dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 28/06/2013, 22h32
  2. constructeur pour module de classe
    Par hector2 dans le forum Général VBA
    Réponses: 5
    Dernier message: 08/12/2010, 13h19
  3. Réponses: 3
    Dernier message: 01/06/2007, 10h12
  4. Réponses: 5
    Dernier message: 30/01/2007, 13h23
  5. [POO] Deux constructeurs pour une même classe
    Par amika dans le forum Langage
    Réponses: 4
    Dernier message: 16/12/2006, 16h31

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