#include<fstream>
#include<string>
#include<memory>
class Log
{
private:
string errorlog;
shared_ptr<ofstream> fs;
public:
Log() :errorlog(""), fs(new ofstream("c:\\Log\\log.txt"), [](ofstream& fs) {fs.close(); })
{
}
void transferLog(string errorlog)
{
(*fs)<<(errorlog) //is working
fs->operator<<(errorlog); //not working
}
}
我知道如果它有效,它在其他常见情况下效果很好。
此错误列表
no instance of overloaded function "std::basic_ofstream<_Elem, _Traits>::operator<< [with _Elem=char, _Traits=std::char_traits<char>]" matches the argument list
答案 0 :(得分:3)
那么就不要这样做。
可以用两种方式之一定义重载operator<<
。它可以定义为成员函数,可以称为fs->operator<<(errorlog);
,也可以定义为独立函数,可以称为operator<<(*fs, errorlog);
。
对于标准输出流,一些重载使用第一种形式,其他重载使用第二种形式。如果你选错了形式,事情就会破裂。除非你有一个非常具体的用例,你需要使用其中一个,只需写*fs << errorlog;
:考虑两种形式并从两个集合中选择最佳重载。