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 :

Ma surcharge de l'opérateur << ne fonctionne pas, sur ma classe vecteur.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut Ma surcharge de l'opérateur << ne fonctionne pas, sur ma classe vecteur.
    Bonsoir,

    Je suis en train de programmer une classe vecteur qui est censé représenter des vecteurs de dimensions quelconque.
    Et j'aimerais bien surcharger pas mal d'opérateurs sur cette classe mais là j'ai un peu de mal.

    Je vous met la classe dans l'état actuel:

    Vecteur.h
    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
    #ifndef VECTEUR
    #define VECTEUR
     
    #include <vector>
     
     
     
    /*!
     * \class Vecteur
     * \brief La classe Vecteur représente un vecteur dans un espace de dimension quelconque.
     */
    class Vecteur{
     
        public :
        /*!
         * \brief Constructeur de la classe Vecteur.
         *
         *  Construit un vecteur de dimension nombreComposantes qui valent toutes composante.
         *
         *  \param nombreComposantes : dimension du vecteur = nombre de composantes du vecteur. Doit être sctricement positif.
         *  \param composante : valeur des composantes du vecteur.
         */
        Vecteur(unsigned int nombreComposantes, long double composante=0 );
     
     
        /*!
         * \return la dimension du vecteur.
         */
        unsigned int size() const;
     
        /*!
         *  \brief Surcharge de l'opérateur []
         *
         *  \param numeroComposante : numéro de la composante du vecteur à affecter. Va de 0 jusqu'à dimension du vecteur -1.
         *  \return Une référence sur la composante du vecteur
         */
        long double operator[](const unsigned int numeroComposante) const;
        long double& operator[](const unsigned int numeroComposante);
     
     
     
        private:
            std::vector<long double> m_vecteur; //!<Tableau dynamique contenant l'ensemble des composantes du vecteur.
     
    };
     
    #endif
    Vecteur.cpp
    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
    #include "Vecteur.h"
    #include <cmath>
    #include <iostream>
     
     
     
    Vecteur::Vecteur(unsigned int nombreComposantes, long double composante)
    {
        if(nombreComposantes >0)
            m_vecteur.assign(nombreComposantes, composante);
    }
     
    unsigned int Vecteur::size() const
    {
        return m_vecteur.size();
    }
     
    long double Vecteur::operator[] (const unsigned int numeroComposante) const
    	{
    	    return m_vecteur[numeroComposante];
    	}
     
    long double& Vecteur::operator[] (const unsigned int numeroComposante)
    	{
    	    return m_vecteur[numeroComposante];
    	}
     
    ostream &operator<<( ostream &out, const Vecteur &vecteur )
    {
        for(unsigned int i=0; i<vecteur.size();i++)
            out << vecteur[i] << " " ;
        return out;
    }
    Donc si j'ai bien compris pour surcharger "<<" il ne faut pas la mettre dans le classe. C'est bien ce que j'ai fait.
    Mais à la ligne de la définition de la méthode j'ai l'erreur: " expected constructor, destructor, or type conversion before '&' token "

    Qu'est-ce qui ne vas pas ?

    Merci.

  2. #2
    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,

    Cette entrée de la FAQ traite du sujet.

    MAT.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Salut,

    Cette entrée de la FAQ traite du sujet.

    MAT.
    Oui j'ai fait exactement comme dans la FAQ, et je ne comprend pas pourquoi ça ne fonctionne pas.

    Sauf que dans la FAQ la fonction est dans le .h et qu'ici je l'ai mis dans le .cpp, mais j'ai testé les deux et j'ai la même erreur.

  4. #4
    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
    Il manque std:: devant stream dans ta version.
    Mais il faut aussi la déclaration (avec le friend pour pouvoir accéder à m_vecteur) dans le .h

    En fait la FAQ mélange à la fois la déclaration et l'implémentation, c'est vrai que c'est sans doute déroutant quand on n'a pas l'habitude...

    MAT.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Il manque std:: devant stream dans ta version.
    J'avais également testé de mettre le std::
    Toujours une erreur mais ce n'est pas la même " declaration of 'operator<<' as non-function"

    Citation Envoyé par Mat007 Voir le message
    Mais il faut aussi la déclaration (avec le friend pour pouvoir accéder à m_vecteur) dans le .h
    Oui j'avais aussi essayé de mettre la déclaration dans le .h (j'ai testé dans la class et en dehors) et toujours l'erreur.

    Par contre j'ai pas besoin de mettre la fonction en friend puisque si tu regardes bien j'ai surchargé l'opérateur []

  6. #6
    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
    Citation Envoyé par Cpowa Voir le message
    Par contre j'ai pas besoin de mettre la fonction en friend puisque si tu regardes bien j'ai surchargé l'opérateur []
    Au temps pour moi !

    Si tu veux pouvoir utiliser l'opérateur ailleurs il faut quelque chose dans le .h :
    . soit l'implémentation de l'opérateur en dehors de la classe avec un inline devant et un include <iostream> en haut
    . soit la déclaration en dehors de la classe, avec un include <iosfwd> en haut, et l'implémentation dans le .cpp

    Quel est ton compilateur ?

    MAT.
    ps : re-colle le code avec la correction du std:: et une des deux solutions ci-dessus au choix pour voir ?

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

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  2. Réponses: 8
    Dernier message: 29/08/2006, 00h56
  3. [C#] Surcharge de l'opérateur ==
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2006, 16h19
  4. Réponses: 6
    Dernier message: 12/07/2006, 15h34
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

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