错误:“ostream”没有命名类型
Posted
技术标签:
【中文标题】错误:“ostream”没有命名类型【英文标题】:error: ‘ostream’ does not name a type 【发布时间】:2014-12-16 04:54:36 【问题描述】:我在 C++ 中重载了 > 运算符,但它无法编译。
错误信息是:“错误:‘ostream’没有命名类型” 为什么我会收到此错误?如何解决?
#ifndef COMPLEX_H
#define COMPLEX_H
#include <cstdlib> //exit
#include <istream>
#include <ostream>
class Complex
public:
Complex(void);
Complex(double a, double b);
Complex(double a);
double real() const
return a;
double imag() const
return b;
friend ostream& operator<<(ostream& out,const Complex& c);
friend istream& operator>>(istream& in, Complex& c);
private:
double a;
double b;
;
ostream& operator<<(ostream& out,const Complex& c)
double a=c.real() , b = c.imag();
out << a << "+" << b<<"i";
return out;
istream& operator>>(istream& in, Complex& c)
in >> c.a>> c.b;
return in;
#endif
【问题讨论】:
【参考方案1】:在任何地方使用std::ostream
和std::istream
。
ostream
和 istream
位于命名空间 std
【讨论】:
还建议阅读:Why is “using namespace std;” considered bad practice?(如果您不小心在using namespace std;
进行构建!
我是否正确地重载了>>?我在 main.cpp 中使用了它:Complex c();辛 >> c;但它也不会编译。
@user2741941 你用过std::istream& operator>>( std::istream& in, Complex& c ) ...
吗?【参考方案2】:
命名空间 std 中定义的类型的限定名称
friend std::ostream& operator<<(std::ostream& out,const Complex& c);
最好包含<iostream>
而不是两个单独的标头<istream>
和<ostream>
【讨论】:
【参考方案3】:你忘了添加
using namespace std;
【讨论】:
在使用此解决方案之前值得一读:why-is-using-namespace-std-considered-bad-practice以上是关于错误:“ostream”没有命名类型的主要内容,如果未能解决你的问题,请参考以下文章
错误:'operator<<' 不匹配(操作数类型为'std::ostream' aka'std::basic_ostream<char>' 和'std::_List_iter
spdlog 错误:“不知道如何格式化类型,包括 fmt/ostream.h 如果它提供了应该使用的 operator<<”
如何检测类型是否可以流式传输到std :: ostream?
‘operator<<’ 不匹配(操作数类型是 ‘std::ostream’ aka ‘std::basic_ostream<char>’ 和 ‘const std::type
错误:无法将‘std::basic_ostream<char>’左值绑定到‘std::basic_ostream<char>&&’