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 风格转换。
无法在 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 风格转换。