错误:“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::ostreamstd::istream

ostreamistream 位于命名空间 std

【讨论】:

还建议阅读:Why is “using namespace std;” considered bad practice?(如果您不小心在using namespace std; 进行构建! 我是否正确地重载了​​>>?我在 main.cpp 中使用了它:Complex c();辛 >> c;但它也不会编译。 @user2741941 你用过std::istream&amp; operator&gt;&gt;( std::istream&amp; in, Complex&amp; c ) ... 吗?【参考方案2】:

命名空间 std 中定义的类型的限定名称

friend std::ostream& operator<<(std::ostream& out,const Complex& c);

最好包含&lt;iostream&gt; 而不是两个单独的标头&lt;istream&gt;&lt;ostream&gt;

【讨论】:

【参考方案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?

c++中重载输出操作符,为啥要返回引用

‘operator<<’ 不匹配(操作数类型是 ‘std::ostream’ aka ‘std::basic_ostream<char>’ 和 ‘const std::type

错误:无法将‘std::basic_ostream<char>’左值绑定到‘std::basic_ostream<char>&&’