所以我有:
在我的.h:
friend std::ofstream & operator <<(std::ofstream & output, myClass & s);
和我的.cpp
std::ofstream & operator <<(std::ofstream & output, myClass & s)
{
ofstream ofile << ("output.txt");
output << "Test" << endl;
return output;
}
我收到错误:
'&lt;&lt;'之前的预期初始化程序令牌
在`std :: ofstream&amp; operator&lt;&lt;(std :: ofstream&amp; output,myClass&amp; s)
和
与'operator&lt;&lt;'不匹配(操作数类型是'std :: ofstream {aka std :: basic_ofstream}'和'const char [5]')
在ofstream ofile << ("output.txt");
这个问题是什么?`
`
答案 0 :(得分:3)
将函数限制为std::ofstream
通常不太适合使用任何类std::ostream
。当您将非const
引用传递给打印函数时,它看起来也非常可疑。这意味着您正式允许打印具有修改打印对象的副作用!
出于这些原因,你应该改变这个:
std::ofstream & operator <<(std::ofstream & output, myClass & s);
对此:
std::ostream & operator <<(std::ostream & output, myClass const& s);
您也不需要在运算符的实现中创建流实例。您将收到一个引用作为第一个参数。所以就这样做(虽然我们正在做,但要避免endl
,除非你确切知道自己在做什么):
std::ostream & operator <<(std::ostream & output, myClass const& s);
{
output << "Test\n";
// output << s.some_member << "\n";
return output;
}
您现在可以将std::ofstream
对象传递给该函数并写入该文件。您只需要创建对象,将文件名传递给它的构造函数:
myClass s;
std::ofstream os("output.txt");
os << s;
答案 1 :(得分:0)
你可能想要做类似以下的事情:
ofstream ofile{"output.txt"};
ofile << some_object;
这是调用 std :: ofstream 的构造函数以及后续写入指定的流,后者又写入文件。