#c
#c
Вопрос:
Я пытаюсь использовать sstream для указания имени файла в ofstream. Но я получаю сообщение об ошибке.
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;
int main()
{
stringstream ss;
for(int i = 0; i < 3; i ) {ss<<"table"<<i;cout<<ss.str()<<endl;
ofstream ofs(ss.str());
ofs.close();
}
}
Ошибка:
temp2.cpp: In function ‘int main()’:
temp2.cpp:10:24: error: no matching function for call to ‘std::basic_ofstream<char>::basic_ofstream(std::basic_stringstream<char>::__string_type)’
temp2.cpp:10:24: note: candidates are:
/usr/include/c /4.6/fstream:629:7: note: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::ios_base::openmode) [with _CharT = char, _Traits = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode]
/usr/include/c /4.6/fstream:629:7: note: no known conversion for argument 1 from ‘std::basic_stringstream<char>::__string_type {aka std::basic_string<char>}’ to ‘const char*’
/usr/include/c /4.6/fstream:614:7: note: std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c /4.6/fstream:614:7: note: candidate expects 0 arguments, 1 provided
/usr/include/c /4.6/fstream:588:11: note: std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>amp;)
/usr/include/c /4.6/fstream:588:11: note: no known conversion for argument 1 from ‘std::basic_stringstream<char>::__string_type {aka std::basic_string<char>}’ to ‘const std::basic_ofstream<char>amp;’
Ответ №1:
Похоже, вы используете реализацию до C 11 std::ofstream
: в исходном стандарте C у конструктора std::ofstream
(и его родственников) не было конструктора, принимающего a std::string
. Был только конструктор из char const*
. Обходной путь заключается в получении соответствующей C-строки из std::string
:
std::ofstream ofs(ss.str().c_str());
Ответ №2:
Вам не нужно использовать string
, вы можете сделать это с помощью :
ofs << ss.rdbuf();