0

私の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);
4

2 に答える 2

4

今日は水晶玉が少し曇っていますが、何か見えると思います...

<psychic-powers>
あなたfilenameはとして宣言されていstd::string filename;ます。残念ながら、C ++ 03では、std::(i|o)fstreamクラスには変数を受け入れるコンストラクターがなく、std::string変数を受け入れるだけchar const*でした。

解決策:合格filename.c_str()
</psychic-powers>

于 2012-02-10T02:07:11.967 に答える
1

ファイル名が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ステートメントの使い方を誤解しているようです。

于 2012-02-10T02:09:46.790 に答える