Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat Ralat 'melepasi 'const StudentT' sebagai hujah 'ini'' Semasa Mengakses Fungsi Ahli daripada `std::set`?
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
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!