Can't write to ostream in gnu linux c++ error: invalid operands of types ofstream and ‘const char [2]’ to binary ‘operator

Can't write to ostream in gnu linux c++ error: invalid operands of types ofstream and ‘const char [2]’ to binary ‘operator

无法在 Linux 上编译这段小代码:

#include <fstream>
#include <string>
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
    char fileName[512];
    sprintf(fileName, "test");
    ofstream iriFile(string(fileName));
    iriFile<<",";
    return 0;
}

我是这样编译的:g++ test.cpp 并且得到了这个:

test.cpp:12:11: error: invalid operands of types ‘std::ofstream(std::__cxx11::string) {aka std::basic_ofstream(std::__cxx11::basic_string)}’ and ‘const char [2]’ to binary ‘operator<<’ iriFile<<",";

可能是什么原因?

好的,解决方案是删除隐式 string() 创建:

string sFileName(fileName)
ofstream iriFile(sFileName);

正如您所指出的,删除显式字符串创建可以修复它。

值得补充的是,对于具有 explicit 构造函数的类型,也可以通过使用 list initialization 来解决这个问题,如下所示:

ofstream iriFile(string{sFileName});

首先,您不需要将 const char * 显式转换为 std::string,它有 std::ifstream 构造函数:

 std::ofstream iriFile(fileName);

但如果你想更加安全和冗长,请使用正确的 C++,然后:

std::ofstream iriFile( static_cast<std::string>(fileName) );

不是 C 风格转换。