首页 文章

重载<<以输出到文件中

提问于
浏览
-1

所以我有:

在我的.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;
}

我收到错误:

'<<'令牌之前的预期初始化程序

在`std :: ofstream&operator <<(std :: ofstream&output,myClass&s)

'operator <<'不匹配(操作数类型是'std :: ofstream '和'const char [5]')

ofstream ofile << ("output.txt");

这个问题是什么?`

`

2 回答

  • 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;
    
  • 0

    您可能想要执行类似以下操作:

    ofstream ofile{"output.txt"};
    ofile << some_object;
    

    这是调用std :: ofstream的构造函数以及后续写入指定的流,后者又写入文件 .

相关问题