这在一些编译器上运行良好...有没有办法做到这一点,它只是工作而不是c ++ 11或c ++ 14上的不同编译器的问题?
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void save_file() {
string file;
ofstream os;
cout << "Save As: ";
getline(cin, file, '\n');
os.open(file + ".dat");
//rest of code
}
错误:没有可行的转换来自&#39; basic_string,std :: allocator&gt;&#39; to&#39; const char *&#39;
所以我google它,找到了一些答案,或者在这种情况下,canswers(癌症),尝试了
os.open(file.c_str() + ".dat");
错误:二进制表达式的操作数无效(&#39; const char *&#39;和&#39; const char *&#39;)
答案 0 :(得分:1)
根据C ++ 11标准27.9.1.10 basic_ofstream的构造函数之一是:
explicit basic_ofstream(const string& s, ios_base::openmode mode = ios_base::out);
这意味着任何符合标准的编译器都应该能够编译:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
string file = "temp";
ofstream os;
os.open(file + ".dat");
}
不要忘记编译时需要使用-std=c++11
或更高的标记。
答案 1 :(得分:1)
“+”运算符不能用于C风格的字符串。试试这个:
string name = file+".dat";
os.open(name.c_str());
您将std :: string类型创建为c ++样式的串联,然后将其作为c字符串传递给open。
答案 2 :(得分:1)
在C ++ 11中,os.open( file + ".dat" )
工作正常。在C ++ 11之前,没有std::ofstream::open
接受字符串,所以你必须写os.open( (file + ".dat").c_str() )
。请注意括号和.c_str()
所在的位置 - 您必须首先与std::string
连接,并且只对结果调用.c_str()
。