Heim >Backend-Entwicklung >C++ >Warum schlägt „ifstream::open(std::string)' in älteren C-Versionen fehl?

Warum schlägt „ifstream::open(std::string)' in älteren C-Versionen fehl?

Susan Sarandon
Susan SarandonOriginal
2024-12-10 03:17:10492Durchsuche

Why Does `ifstream::open(std::string)` Fail in Older C   Versions?

Keine passende Funktion: ifstream::open(std::string)

Im C-Code mit der folgenden Zeile:

file.open(name);

Ein häufiger Fehler ist:

no matching function for call 'std::ifstream::open(std::string&)'

Dieses Problem tritt aufgrund älterer Versionen auf von C (vor C 11) unterstützte das Öffnen einer Datei mit einem std::string-Argument nicht. Für die Funktion open() war ein Zeichenarray oder eine Zeichenfolge im C-Stil erforderlich.

Lösung

Um diesen Fehler zu beheben, kann man einen der folgenden Ansätze verwenden :

  • Konvertieren Sie den std::string mit c_str() in einen String im C-Stil. Methode:
file.open(name.c_str());
  • Verwenden Sie den Konstruktor für die ifstream-Klasse, wie unten gezeigt:
std::ifstream file(name.c_str());

Dieser Ansatz eliminiert die Notwendigkeit, Konstruktion und zu trennen Öffnung.

Um außerdem sicherzustellen, dass die Funktion „loadNumbersFromFile()“ ihr Argument nicht ändert, ist es ratsam, vorbei zu gehen Verweis auf eine Konstante std::string stattdessen:

std::vector<int> loadNumbersFromFile(const std::string& name)
{
    // ...
}

Das obige ist der detaillierte Inhalt vonWarum schlägt „ifstream::open(std::string)' in älteren C-Versionen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn