Rumah > pembangunan bahagian belakang > C++ > Mengapa Fungsi Ahli Bukan Const Menyebabkan Ralat Apabila Digunakan dengan Objek Const dalam `std::set`?

Mengapa Fungsi Ahli Bukan Const Menyebabkan Ralat Apabila Digunakan dengan Objek Const dalam `std::set`?

Patricia Arquette
Lepaskan: 2024-12-15 12:56:30
asal
750 orang telah melayarinya

Why Do Non-Const Member Functions Cause Errors When Used with Const Objects in a `std::set`?

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

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

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

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!

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