C ++,错误:“无操作符”==“匹配这些操作数”,ostream / istream

时间:2017-04-10 19:46:16

标签: c++ operator-overloading operators iostream

我是一个新的编码,需要为某种数据库做一个程序。我在youtube上看到了一些教程,复制了他的代码,但我得到了一个错误,我不知道如何解决它。

错误:没有运算符“==”匹配这些操作数;参考if(outs == cout)

这是代码:

void Employee::output(ostream& outs)
{
    if (outs == cout)
    {
        outs << "Name: " << name << endl;
        outs << "ID number: " << id_number << endl;
        outs << "Address: " << address << endl;
        outs << "Salary: " << salary << endl;
        outs << "Years worked at company: " << year_started << endl;
    }
    else {
        outs << name << endl;
        outs << id_number << endl;
        outs << address << endl;
        outs << salary << endl;
        outs << year_started << endl;
    }
}

这是我宣布输出的方式:

void output(std::ostream& outs);

使用#include&lt;添加了iostream和字符串&GT;

3 个答案:

答案 0 :(得分:5)

Stream对象无法比较,但您可以比较它们的地址:

    if ( & outs == & cout )

答案 1 :(得分:1)

您无法比较流的相等性。

相反,您可以实现不同的功能,一个用于cout,另一个用于fstream

我建议使用两种不同的功能,注意一个有提示而另一个没有。

答案 2 :(得分:1)

您可以使用完全不同的方法来创建调试输出,该输出不依赖于比较正在写入的流是view_init(elev=None, azim=None) 。这种方法依赖于是否已打开标志。

创建帮助器std::cout

帮助器namespace可以保存数据并提供操作数据的便利功能。

namespace

以不同方式实施namespace Employee_NS { bool writeVerbose = false; template <bool val> std::ostream& verbose(std::ostream& outs) { writeVerbose = val; return outs; } std::ostream& operator<<(std::ostream& outs, std::ostream& (*fun)(std::ostream&)) { return fun(outs); } };

将返回类型从Employee::output更改为void,并将该功能设为std::ostream&成员函数。

const

添加合适的std::ostream& Employee::output(std::ostream& outs) const { if ( Employee_NS::writeVerbose ) { outs << "Name: " << name << std::endl; outs << "ID number: " << id_number << std::endl; outs << "Address: " << address << std::endl; outs << "Salary: " << salary << std::endl; outs << "Years worked at company: " << year_started << std::endl; } else { outs << name << std::endl; outs << id_number << std::endl; outs << address << std::endl; outs << salary << std::endl; outs << year_started << std::endl; } return outs; } 功能

添加非成员函数,以便能够以直观的方式使用operator<<个对象。

Employee

现在,无论输出是进入文件还是std::ostream& operator<<(std::ostream& out, Employee const& e) { return e.output(out); } ,都可以创建详细输出。

std::cout

这种方法提升了是否为调用函数创建详细输出的决定。它还提供了在任何输出目标中创建详细输出的功能。