Salut à tous,

Mon problème aujourd'hui est que je n'arrive pas à comprendre pourquoi je ne peut pas utiliser l'operateur << avec un ostream alors qu'il est défini et qu'il marche avec std::cout.

Voici le 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
ostream& Box::operator <<(ostream& os) {
    return os << x<< ","<< y<< ","<< width<< ","<< height<< endl;
}
 
 
ostream& Frame::operator<<(ostream& os) {
    os << "frame.id : "<< id<< endl;
    for (list<Box>::iterator it = boxes.begin();
            it != boxes.end(); it ++) {
        Box box = (*it);
        os << box; // ERREUR à CETTE LIGNE (cf ci dessous)
    }
 
    os << endl;
 
    return os;
}
les classes Box et Frame sont tout ce qu'il y a de plus normal

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 Box {
public:
    Box();
    int x, y;
    unsigned int width, height;
    std::ostream& operator<<(std::ostream&);
};
 
class Frame {
public:
    Frame();
    unsigned int id;
    std::list<Box> boxes;
    std::ostream& operator <<(std::ostream& os);
};

le message d'erreur est

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
In member function «std::ostream& Frame::operator<<(std::ostream&)
erreur: no match for «operator<<" in «os << b"
et si j'essaye de les afficher avec std::cout, ca marche très bien. Ca coince juste avec ce ofstream
edit: ca marchait pas avec les cout en fait, j'avais pas du faire le clean

Une idée ?

ps: c'est dur le c++