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
Freigeben: 2024-12-10 03:17:10
Original
445 Leute haben es durchsucht

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);
Nach dem Login kopieren

Ein häufiger Fehler ist:

no matching function for call 'std::ifstream::open(std::string&)'
Nach dem Login kopieren

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());
Nach dem Login kopieren
  • Verwenden Sie den Konstruktor für die ifstream-Klasse, wie unten gezeigt:
std::ifstream file(name.c_str());
Nach dem Login kopieren

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)
{
    // ...
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage