Ralat dalam Melepasi Fungsi Bukan Ahli Const ke Objek Const
Dalam kod yang disediakan, set std::set digunakan untuk menyimpan StudentT objek. Isu timbul apabila cuba memanggil fungsi ahli getId() dan getName() pada objek dalam set. Fungsi ahli ini tidak ditandakan sebagai const, yang bermaksud ia boleh mengubah suai data objek. Walau bagaimanapun, objek dalam std::set disimpan sebagai const StudentT, menghalang sebarang pengubahsuaian.
Pengkompil mengesan ketidakkonsistenan ini dan menjana mesej ralat berikut:
../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
Ralat ini menunjukkan bahawa pengkompil cuba menghantar objek const sebagai hujah ini kepada fungsi bukan ahli const, iaitu dilarang.
Penyelesaian:
Untuk menyelesaikan isu ini, ubah suai fungsi ahli getId() dan getName() menjadi const seperti berikut:
int getId() const { return id; } string getName() const { return name; }
Dengan menandakan fungsi ini sebagai const, anda memastikan bahawa ia tidak akan mengubah suai data objek dan boleh dipanggil dengan selamat objek const.
Selain itu, ia juga disyorkan untuk membuat < fungsi perbandingan operator const dengan menghantar rujukan const kepada parameternya:
inline bool operator< (const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }
Pengubahsuaian ini akan menghalang ralat yang tidak dijangka dan memastikan kod beroperasi dengan betul.
Atas ialah kandungan terperinci Mengapa Fungsi Ahli Bukan Const Menyebabkan Ralat Apabila Digunakan dengan Objek Const dalam `std::set`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!