Rumah > pembangunan bahagian belakang > C++ > Mengapa Adakah `getId()` dan `getName()` Menyebabkan Ralat 'Meluluskan Objek 'const' sebagai Argumen 'ini' dalam C ?

Mengapa Adakah `getId()` dan `getName()` Menyebabkan Ralat 'Meluluskan Objek 'const' sebagai Argumen 'ini' dalam C ?

DDD
Lepaskan: 2024-12-23 20:18:15
asal
802 orang telah melayarinya

Why Are `getId()` and `getName()` Causing

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;
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan