gpt4 book ai didi

c++ - ostream::operator<< 不与 shared_ptr 中的 operator-> 一起工作

转载 作者:行者123 更新时间:2023-11-27 23:57:44 25 4
gpt4 key购买 nike

#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

最佳答案

那么不要那样做。

重载 operator<<可以用两种方式之一来定义。它可以被定义为一个成员函数,可以被调用为fs->operator<<(errorlog);。 ,或者它可以被定义为一个独立的函数,可以称为 operator<<(*fs, errorlog); .

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

关于c++ - ostream::operator<< 不与 shared_ptr 中的 operator-> 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41380234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com