问题
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?
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/16541597/identifier-ostream-is-undefined-error