Я использую MinGW Developer Studio с компилятором MinGW. У меня есть небольшая программа со следующей функцией:
void NameFile()
{
ofstream outfile;
string sFilename = "glatisant.html";
outfile.open(sFilename, ofstream::out);
outfile.close();
}
При создании/компиляции я получаю следующий текст ошибки:
main.cpp: 43: ошибка: нет соответствующей функции для вызова в 'std :: basic_ofstreamstd :: char_traits> :: open (std :: string &, const std :: _ Ios_Openmode &)'
fstream: 695: примечание: кандидаты: void std :: basic_ofstream <_CharT,> _Traits> :: open (const char *, std :: _ Ios_Openmode) [с _CharT = char, _Traits => std :: char_traits]
Согласно определению fstream.out(), я должен иметь возможность передавать строку и работать, но это не так. Почему нет?
Примечание: сообщение об ошибке, похоже, указывает на то, что мой компилятор не распознает возможность аргумента типа string, который определен в c++ 11. Я думаю, мне нужно заставить мою среду использовать c++ 11, потому что я действительно предпочли бы современный подход, соответствующий стандартам.
В не-С++ 11 метод ofstream::open
требует const char *
, поэтому попробуйте передать sFilename.c_str()
:
outfile.open(sFilename.c_str(), ofstream::out);
^^^^^^^^
В противном случае в С++ 11 вы также можете передать std::string
, убедитесь, что вы включили -std=c++11
или -std=c++0x
.
В MingW-Developer-Studio вы можете перейти к Project> Settings> Compile и поместить -std=c++11
или -std=c++0x
в "Дополнительные параметры компиляции",
Вероятно, вы имели в виду ios_base::out
вместо ofstream::out
.
Кроме того, в C++98/C++03
вход в ofstream::open
- это char const*
, а не std::string
.
Если вы используете C++98/C++03
, измените строку
outfile.open(sFilename, ofstream::out);
в
outfile.open(sFilename.c_str(), ios_base::out);
Если вы используете C++11
, все хорошо.
ofstream::out
работает хорошо, поэтому ему не нужно его менять. Смотри здесь
--std=c++11
в ваш make-файл или команду компиляции.