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
Susan Sarandonasal
2024-12-26 10:55:14572semak imbas

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;

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

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;
}

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();
}

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!

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