ostream的::运营商LT;<不与运营商合作 - >在shared_ptr中

时间:2016-12-29 12:57:48

标签: c++ c++11

#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

1 个答案:

答案 0 :(得分:3)

那么就不要这样做。

可以用两种方式之一定义重载operator<<。它可以定义为成员函数,可以称为fs->operator<<(errorlog);,也可以定义为独立函数,可以称为operator<<(*fs, errorlog);

对于标准输出流,一些重载使用第一种形式,其他重载使用第二种形式。如果你选错了形式,事情就会破裂。除非你有一个非常具体的用例,你需要使用其中一个,只需写*fs << errorlog;:考虑两种形式并从两个集合中选择最佳重载。