Записать в указанный пользователем файл на C ++ - PullRequest
0 голосов
/ 01 февраля 2012

Могу ли я указать, какой файл я хочу записать в C ++? Я хочу иметь возможность ввести имя файла и записать в этот файл. Когда я пытаюсь сделать myfile.open("example.txt") myfile.open(var), я получаю большую ошибку ...

ошибка: нет соответствующей функции для вызова forstd :: basic_ofstream> :: open (std :: string &) ’ /usr/include/c++/4.2.1/fstream:650: примечание: кандидаты: void std :: basic_ofstream <_CharT, _Traits> :: open (const char *, std :: _ Ios_Openmode) [с _CharT = char, _Traits = std :: char_traits]

Можете ли вы понять это или объяснить, что я делаю неправильно? У меня такое ощущение, что это очень просто, так как это моя первая неделя с использованием C ++.

Ответы [ 7 ]

4 голосов
/ 01 февраля 2012

Если var является std :: string , попробуйте:

myfile.open(var.c_str());

Ошибка говорит вам точно, что не так, хотя точность названных типов шаблонов непомочь сделать это кристально ясно.Взгляните на ссылку для .open () .Для имени файла требуется const char * и еще один необязательный параметр mode.То, что вы передаете, не является const char *.

2 голосов
/ 01 февраля 2012

Короче говоря, да, вы можете указать файл для открытия и записи различными способами.Если вы используете fstream и хотите написать простой текст, это один из способов:

#include <string>
#include <fstream>
int main()
{
  std::string filename = "myfile.txt";
  std::fstream outfile;
  outfile.open( filename.c_str(), std::ios::out );
  outfile << "writing text out.\n";
  outfile.close();
  return 0;
}
2 голосов
/ 01 февраля 2012

Как говорит ошибка, он пытается сопоставить параметры с символьным указателем, а std :: string не является символьным указателем.Однако std :: string :: c_str () вернет единицу.

try:

myfile.open(var.c_str());
0 голосов
/ 01 февраля 2012

Сообщение об ошибке совершенно ясно.Он говорит: класс basic_ofstream (ваш файловый объект) не имеет функции-члена, которая называется "open", и принимает один аргумент типа string (ваш var).Вам нужно перейти от string до const char * - для этого вы используете var.c_str().

0 голосов
/ 01 февраля 2012

Существует второй параметр для открытого вызова.он должен быть похож на myfile.open ("example.txt", fstream :: out)

0 голосов
/ 01 февраля 2012

Является ли ваша переменная string, char[] или char*?Я думаю, что метод open () хочет строку в стиле c, которая будет char[] или char*, поэтому вам нужно будет вызвать метод .c_str() для вашей строки, когда вы передадите ее:

myfile.open(var.c_str());
0 голосов
/ 01 февраля 2012

Является ли var a std::string? Если это так, вы должны передать var.c_str(), поскольку не существует варианта .open(), который принимает std::string.

...