我正在练习一些c ++(试图离开Java),我偶然发现了这个恼人的错误:错误:没有操作符<<匹配这些操作数。我在这个网站上搜索了一个明确的答案,没有运气,我确实发现我不是唯一一个。
这个错误发生在我的.cpp文件中,还有其他错误,但我现在不介意他们。
void NamedStorm::displayOutput(NamedStorm storm[]){
for(int i = 0; i < sizeof(storm); i++){
cout << storm[i] << "\n";
}
}
“&lt;&lt;”我不确定最新情况。
答案 0 :(得分:5)
由于您正在尝试cout
一个类对象,因此需要重载<<
std::ostream& operator<<(ostream& out, const NamedStorm& namedStorm)
答案 1 :(得分:2)
您必须重载<<
运算符才能将对象重定向到流中。
您可以作为成员函数重载,但在这种情况下,您必须使用语法object << stream
才能使用该重载函数。
如果您希望使用此语法stream << object
,则必须将<<
运算符重载为“免费”函数,即不是NamedStorm类的成员。
这是一个有效的例子:
#include <string>
#include <iostream>
class NamedStorm
{
public:
NamedStorm(std::string name)
{
this->name = name;
}
std::ostream& operator<< (std::ostream& out) const
{
// note the stream << object syntax here
return out << name;
}
private:
std::string name;
};
std::ostream& operator<< (std::ostream& out, const NamedStorm& ns)
{
// note the (backwards feeling) object << stream syntax here
return ns << out;
}
int main(void)
{
NamedStorm ns("storm Alpha");
// redirect the object to the stream using expected/natural syntax
std::cout << ns << std::endl;
// you can also redirect using the << method of NamedStorm directly
ns << std::cout << std::endl;
return 0;
}
从自由重定向重载调用的函数必须是NamedStorm的公共方法(在本例中我们调用NamedStorm类的operator<<
方法),或者重定向重载必须是{{1为了访问私有字段,NamedStorm类。