/ / Unterstützt ofstream variable.open vorgegebene Stringvariablen? - c ++, ofstream

Unterstützt ofstream variable.open vorgegebene String-Variablen? - C ++, Ofstream

Meine IDE hat Probleme mit der Variablen "Dateiname" in der letzten Zeile. Kann mir jemand sagen warum?

    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);

Antworten:

4 für die Antwort № 1

Meine Kristallkugel ist heute etwas bewölkt, aber ich glaube, ich kann etwas sehen ...

<psychic-powers>
Ihre filename wird als deklariert std::string filename;. Leider in C ++ 03, std::(i|o)fstream Klassen hatten keine Konstruktoren, die dies akzeptieren std::string nur Variablen char const* Einsen.

Lösung: Pass filename.c_str().
</psychic-powers>


1 für die Antwort № 2

Vorausgesetzt, dass Dateiname ist vom Typ Std :: ZeichenfolgeDann können Sie es nicht direkt an den ofstream-Konstruktor übergeben: Du brauchst die Kraft von 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);

Sie scheinen auch falsch verstanden zu haben, wie man das benutzt Anweisung wechseln.