Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Mendapat Ralat 'melepasi 'const StudentT' sebagai hujah 'ini'' Semasa Mengakses Fungsi Ahli daripada `std::set`?

Mengapa Saya Mendapat Ralat 'melepasi 'const StudentT' sebagai hujah 'ini'' Semasa Mengakses Fungsi Ahli daripada `std::set`?

Susan Sarandon
Lepaskan: 2024-12-26 10:55:14
asal
570 orang telah melayarinya

Why Do I Get

Kelayakan Fungsi Tidak Konsisten dalam Invokasi Fungsi Ahli

Dalam kod yang disediakan, ralat timbul apabila mengakses fungsi ahli getId() dan getName() daripada objek yang disimpan dalam set struktur data. Isu ini berpunca daripada ketidakpadanan antara constness objek dan kelayakan fungsi ahli.

Untuk memahami perkara ini, kita perlu ingat bahawa objek dalam set disimpan sebagai rujukan const. Walau bagaimanapun, fungsi ahli getId dan getName tidak diisytiharkan sebagai const, yang membayangkan bahawa mereka boleh mengubah suai keadaan objek.

Dalam baris di mana ralat berlaku:

cout << itr->getId() << " " << itr->getName() << endl;
Salin selepas log masuk

yang pengkompil mengesan bahawa iterator itr menunjuk ke objek StudentT const, yang mengikut definisi tidak boleh diubah suai. Akibatnya, percubaan untuk memanggil fungsi bukan ahli const pada objek const tidak dibenarkan, oleh itu mesej ralat dihasilkan:

../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
Salin selepas log masuk

Untuk menyelesaikan isu ini, kita mesti mengisytiharkan fungsi ahli getId dan getName sebagai const, menunjukkan bahawa mereka tidak mengubah suai keadaan objek:

int getId() const {
    return id;
}

string getName() const {
    return name;
}
Salin selepas log masuk

Dengan membuat const fungsi ini, kami menjamin bahawa ia boleh digunakan dengan selamat pada objek const, menghapuskan ralat ketidakpadanan constness.

Selain itu, operator< beban berlebihan untuk kelas StudentT juga harus diisytiharkan sebagai const:

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

Ini memastikan operasi perbandingan tidak cuba mengubah suai objek yang dibandingkan, mengekalkan ketepatan kod.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'melepasi 'const StudentT' sebagai hujah 'ini'' Semasa Mengakses Fungsi Ahli daripada `std::set`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan