Поддерживает ли ofstream variable.open предопределенные строковые переменные? - PullRequest
0 голосов
/ 10 февраля 2012

В моей среде IDE возникли проблемы с переменной "filename" в последней строке. Может кто-нибудь указать мне, почему?

    switch(filename_selection)
    {
        case 1: filename_selection = 1;
        filename = "foo3.sql";
        break;

        case 2: filename_selection = 2;
        filename = "foo2.sql";
        break;

        case 3: filename_selection = 3;
        filename = "foo1.sql";
        break;

        default:
        cout << "Invalid selection." << endl;
        break;
    }
    ofstream File;
    File.open(filename, ios::out | ios::trunc);

Ответы [ 2 ]

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

Мой хрустальный шар сегодня немного облачный, но я думаю, что что-то вижу ...

<psychic-powers>
Ваш filename объявлен как std::string filename;.К сожалению, в C ++ 03 классы std::(i|o)fstream не имели конструкторов, которые принимают std::string переменных, только char const*.

Решение: Pass filename.c_str().
</psychic-powers>

1 голос
/ 10 февраля 2012

Если предположить, что имя файла имеет тип std :: string , то вы не можете передать его непосредственно в конструктор ofstream: вам нужна мощность c_str ()

switch(filename_selection)
{
  case 1:
    //filename_selection = 1; WHAT IS THIS?
    filename = "foo3.sql";
    break;

  case 2:
    ///filename_selection = 2; ???
    filename = "foo2.sql";
    break;

  case 3:
    ///filename_selection = 3; ???
    filename = "foo1.sql";
    break;

  default:
    cout << "Invalid selection." << endl;
    break;
}
ofstream File;
File.open(filename.c_str(), // <<<
          ios::out | ios::trunc);

Также вы, кажется, неправильно поняли, как использовать оператор switch .

...