ошибка передачи строкового аргумента в fstream.open

0

Я использую 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, потому что я действительно предпочли бы современный подход, соответствующий стандартам.

Теги:
string
c++11

2 ответа

1

В не-С++ 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 в "Дополнительные параметры компиляции",

Изображение 174551

  • 0
    Я подумал, что C ++ 11 будет по умолчанию. Как мне это установить?
  • 0
    Поместите --std=c++11 в ваш make-файл или команду компиляции.
Показать ещё 8 комментариев
0

Вероятно, вы имели в виду 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, все хорошо.

  • 0
    В C ++ 11 ofstream::out работает хорошо, поэтому ему не нужно его менять. Смотри здесь
  • 0
    @MM. Спасибо что подметил это. Я этого не знал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню