我是一个新的编码,需要为某种数据库做一个程序。我在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;
答案 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
这种方法提升了是否为调用函数创建详细输出的决定。它还提供了在任何输出目标中创建详细输出的功能。