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 :

Surchage opérateurs de flux


Sujet :

SL & STL C++

  1. #1
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut Surchage opérateurs de flux
    Hello,

    J'ai un peu de mal avec la surcharge d'opérateurs de flux... :

    j'ai une classe définie comme ça :

    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
    class Color
    {
     
    //[...]
    public:
        friend std::istream& operator >>(std::istream &is, Color &c)
        {
            return is >> c.r >> c.g >> c.b;
        }
     
        friend std::ostream & operator << (std::ostream &os, const Color &c)
        {
            return os << c.r << " " << c.g << " " << c.b ;
        }
    };
    Et ensuite lorsque que j'essaye simplement de m'en servir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::string line;
    std::getline( file, line );
    Color3 ambient;
    ambient << line;
    Bah C::B tire la tronche :

    Citation Envoyé par Code::Blocks
    133|error: no match for 'operator>>' in 'ambient >>
    29|note: candidates are: std::istream& operator>>(std::istream&, Color&)|
    (etc..)
    J'ai pas trouvé beaucoup d'exemple à ce niveau la sur le net ou même dans la faq donc je me permet de poster, si quelqu'un avais une petite idée.

  2. #2
    Expert éminent
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Points : 6 812
    Points
    6 812
    Par défaut
    Ce ne serait l'autre opérateur que tu veux utiliser ??:
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  3. #3
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut
    Euh oui pardon j'ai tellement bidouillé à ce niveau la que j'ai finit par recopier le mauvais code en postant.

    Même avec line >> ambient; , C::B n'en veux toujours pas, et le build message est le même.

  4. #4
    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 jbx2004 Voir le message
    J'ai pas trouvé beaucoup d'exemple à ce niveau la sur le net ou même dans la faq donc je me permet de poster, si quelqu'un avais une petite idée.
    Ça ressemble pourtant bigrement à cette entrée, non ?

    MAT.

  5. #5
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut
    Effectivement. Mais j'ai beau sortir les définitions des fonctions de la classe pour les mettre a l'extérieur, afin de coller exactement à l'exemple et malgré tout, ça ne fonctionne pas, et je ne sais pas pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Color
    {
    public:
        //...
     
        friend std::istream& operator >>(std::istream &is, Color &c);
    };
     
    std::istream& operator >>(std::istream &is, Color& c)
    {
        is >> c.r >> c.g >> c.b;
        return is;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::string line;
    std::getline( file, line );
    Color ambient;
    line >> ambient; //refuse par C::B

    Citation Envoyé par C::B
    133|error: no match for 'operator>>' in 'line >> ambient'|
    34|note: candidates are: std::istream& operator>>(std::istream&, Color&)|
    67|note: std::istream& operator>>(std::istream&, Color4&)|
    80|note: std::istream& operator>>(std::istream&, Vect2&)|
    208|note: std::istream& operator>>(std::istream&, Vect3&)|
    408|note: std::istream& operator>>(std::istream&, Vect4&)|
    115|note: std::istream& operator>>(std::istream&, Mat3x3&)|
    352|note: std::istream& operator>>(std::istream&, Mat4x4&)|
    ||=== Build finished: 1 errors ===|
    J'imagine que ça doit être tout con, mais j'avoue que les opérateurs de flux et moi on viens juste d'être présenté donc c'est pas encore la grande amitié.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 190
    Points : 219
    Points
    219
    Par défaut
    Salut,

    Je dirais que ça ne compile pas car line est une string et pas un istream.

  7. #7
    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
    Le problème est que line est de type std::string et pas std::istream. Il faut que tu construises un std::stringstream à partir de line pour pouvoir utiliser ça de cette manière.

    MAT.

  8. #8
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut
    Ah ok. Je pensais que string descendait de istream.
    Merci beaucoup

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    encapsule le avec un istringstream

  10. #10
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par jbx2004 Voir le message
    Ah ok. Je pensais que string descendait de istream.
    string représente juste la valeur d'une chaine de caractère, ce n'est pas un outil pour coder les valeurs de différents types en suites de caractères (comme ostream), ni les décoder (comme istream).

  11. #11
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut
    Merci à tous pour les précisions :]

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/05/2013, 14h53
  2. Problème avec la surcharge d'opérateur de flux
    Par spirzouf dans le forum Débuter
    Réponses: 10
    Dernier message: 06/09/2011, 21h16
  3. Surchage opérateur & instanciation dynamique
    Par winzzz dans le forum Débuter
    Réponses: 2
    Dernier message: 28/10/2008, 13h24
  4. [surchage d'opérateur >>]problème à la compilation
    Par joe230 dans le forum SL & STL
    Réponses: 2
    Dernier message: 15/11/2007, 10h56
  5. Surchage opérateur d'assignation =
    Par Rodrigue dans le forum C++
    Réponses: 14
    Dernier message: 11/05/2006, 09h14

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