Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Betulkan 'lulus const xxx sebagai hujah 'ini' fungsi ahli membuang kelayakan' Ralat dalam C ?

Bagaimana untuk Betulkan 'lulus const xxx sebagai hujah 'ini' fungsi ahli membuang kelayakan' Ralat dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-12-10 08:34:10206semak imbas

How to Fix

Penyelesaian Ralat: Mengendalikan 'Meluluskan Argumen Const sebagai 'Ini' Argumen'

Apabila menghadapi ralat "melepasi const xxx sebagai 'ini' argumen fungsi ahli membuang kelayakan ," ia menunjukkan bahawa fungsi ahli bukan const sedang dipanggil pada objek const. Dalam kes ini, isu timbul apabila mengakses kaedah getId() dan getName() bagi objek StudentT yang disimpan dalam std::set.

Analisis Masalah

Objek dalam std::set. disimpan sebagai const StudentT. Apabila memanggil getId() dan getName() pada penyahrujukan iterator (*itr), pengkompil mengesan ketidakpadanan. Fungsi ahli bukan const, tetapi objek yang diakses ialah const.

Penyelesaian

Untuk menyelesaikan isu ini, fungsi ahli getId() dan getName() hendaklah diisytiharkan sebagai kaedah const :

int getId() const {
    return id;
}
string getName() const {
    return name;
}

Dengan mengisytiharkannya sebagai kaedah const, ia menjamin bahawa mereka tidak akan mengubah suai objek StudentT, menjadikannya selamat untuk memanggilnya pada objek const.

Pertimbangan Tambahan

Pengendali< hendaklah juga diisytiharkan sebagai kaedah const, kerana ia dipanggil pada objek StudentT const semasa menjalankan operasi set:

inline bool operator< (const StudentT & s1, const StudentT & s2) {
    return s1.getId() < s2.getId();
}

Dengan mengisytiharkannya sebagai const, ia memastikan bahawa pengendali tidak mengubah suai objek yang dibandingkan.

Atas ialah kandungan terperinci Bagaimana untuk Betulkan 'lulus const xxx sebagai hujah 'ini' fungsi ahli membuang kelayakan' Ralat dalam C ?. 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