Question

i need to implement a number class that support operator << for output. i have an error: "identifier "ostream" is undefined" from some reason eventhough i included and try also

here the header file:

Number.h

#ifndef NUMBER_H
#define NUMBER_H
#include <iostream>
class Number{
public:
//an output method (for all type inheritance from number):
virtual void show()=0;

//an output operator:
friend ostream& operator << (ostream &os, const Number &f);


};

#endif

why the compiler isnt recognize ostream in the friend function?

Was it helpful?

Solution

You need to fully qualify the name ostream with the name of the namespace that class lives in:

    std::ostream
//  ^^^^^

So your operator declaration should become:

friend std::ostream& operator << (std::ostream &os, const Number &f);
//     ^^^^^                      ^^^^^

Alternatively, you could have a using declaration before the unqualified name ostream appears:

using std::ostream;

This would allow you to write the ostream name without full qualification, as in your current version of the program.

OTHER TIPS

Andy Prowl's answer is great but please resist putting "using std::ostream" in a header. If you do this then other compilation units using your header file will also have this namespace 'used' by default and you can get nasty compilation errors with namespace clashes.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top