Ralat: Melepasi Objek Const sebagai Argumen 'ini'
Dalam kod C yang diberikan, anda menghadapi ralat semasa cuba mengakses getId () dan getName() fungsi ahli objek yang disimpan dalam a std::set:
<br>ralat: lulus 'const StudentT' sebagai 'ini' hujah 'int StudentT::getId()' membuang kelayakan<br>ralat: lulus 'const StudentT' sebagai 'ini' hujah 'std::string StudentT::getName()' membuang qualifiers<br>
Ralat ini berpunca daripada fakta bahawa objek dalam std::set disimpan sebagai contoh Const StudentT. Apabila anda memanggil fungsi getId() dan getName() pada objek const ini, pengkompil mengesan masalah.
Dalam C , fungsi bukan ahli const tidak dibenarkan mengubah suai objek const. getId() dan getName() ialah fungsi bukan const yang berpotensi mengubah suai objek yang digunakan. Walau bagaimanapun, memandangkan objek dalam set adalah const, sebarang percubaan untuk mengubah suainya melalui fungsi ahli ini akan menjadi ralat.
Penyelesaiannya adalah untuk menjadikan fungsi getId() dan getName() const juga:
int getId() const { return id; } string getName() const { return name; }
Dengan membuat const fungsi ini, anda menunjukkan bahawa ia tidak akan mengubah suai objek yang digunakan dan pengkompil akan membenarkan penggunaannya pada objek const.
Selain itu, adalah disyorkan untuk melaksanakan pengendali< sebagai rujukan const untuk memadankan penggunaan yang dimaksudkan sebagai fungsi perbandingan:
inline bool operator< (const StudentT & s1, const StudentT & s2) { return s1.getId() < s2.getId(); }
Atas ialah kandungan terperinci Mengapa Adakah `getId()` dan `getName()` Menyebabkan Ralat 'Meluluskan Objek 'const' sebagai Argumen 'ini' dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!