Rumah >pembangunan bahagian belakang >C++ >Mengapakah `ifstream::open(std::string)` Gagal dalam Versi C Lama?

Mengapakah `ifstream::open(std::string)` Gagal dalam Versi C Lama?

Susan Sarandon
Susan Sarandonasal
2024-12-10 03:17:10479semak imbas

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

Tiada Fungsi Padanan: ifstream::open(std::string)

Dalam kod C yang mengandungi baris berikut:

file.open(name);

ralat biasa ialah:

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

Ini isu timbul kerana versi lama C (sebelum C 11) tidak menyokong membuka fail menggunakan argumen std::string. Fungsi open() memerlukan tatasusunan aksara atau rentetan gaya C.

Penyelesaian

Untuk menyelesaikan ralat ini, seseorang boleh menggunakan salah satu daripada pendekatan berikut :

  • Tukar std::string kepada rentetan gaya C menggunakan c_str() kaedah:
file.open(name.c_str());
  • Gunakan pembina untuk kelas ifstream, seperti yang ditunjukkan di bawah:
std::ifstream file(name.c_str());

Pendekatan ini menghapuskan keperluan untuk memisahkan pembinaan dan pembukaan.

Selain itu, untuk memastikan bahawa fungsi loadNumbersFromFile() tidak mengubah suai hujahnya, ia adalah dinasihatkan untuk lulus dengan merujuk kepada std::string malar sebaliknya:

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

Atas ialah kandungan terperinci Mengapakah `ifstream::open(std::string)` Gagal dalam Versi C Lama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn