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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 477
    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 confirmé
    Avatar de raptor70
    Inscrit en
    Septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2005
    Messages : 3 173
    Par défaut
    Ce ne serait l'autre opérateur que tu veux utiliser ??:

  3. #3
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 477
    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 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,

    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
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 477
    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 expérimenté
    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
    Par défaut
    Salut,

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

  7. #7
    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
    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
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 477
    Par défaut
    Ah ok. Je pensais que string descendait de istream.
    Merci beaucoup

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

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

  10. #10
    Membre chevronné
    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
    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).

+ 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