Apabila mengisytiharkan berbilang penunjuk objek pada baris yang sama, pembangun sering menghadapi isu biasa yang mungkin membawa kepada ralat penyusun. Memahami punca isu ini adalah penting untuk memastikan pelaksanaan kod yang betul.
Pertimbangkan pengisytiharan kelas berikut:
<code class="cpp">public: Entity() { re_sprite_eyes = new sf::Sprite(); re_sprite_hair = new sf::Sprite(); re_sprite_body = new sf::Sprite(); } private: sf::Sprite* re_sprite_hair; sf::Sprite* re_sprite_body; sf::Sprite* re_sprite_eyes;</code>
Dalam kes ini, mengisytiharkan setiap penunjuk secara berasingan memastikan kefungsian yang betul. Walau bagaimanapun, apabila cuba memendekkan pengisytiharan menjadi satu baris:
<code class="cpp">private: sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;</code>
pengkompil menimbulkan ralat:
error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))
Kunci untuk memahami ralat ini terletak pada tujuan asterisk (*) pengendali. Dalam C , asterisk boleh menunjukkan sama ada penunjuk atau operasi penyahrujukan. Dalam keadaan ini, asterisk harus menunjukkan penunjuk kepada objek sf::Sprite. Walau bagaimanapun, pengisytiharan di atas salah mentafsir asterisk sebagai digunakan untuk re_sprite_body dan re_sprite_eyes, mencipta objek dan bukannya penunjuk.
Untuk menyelesaikan isu ini, sintaks yang betul ialah:
<code class="cpp">sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;</code>
Dengan penjelasan ini , setiap penuding diisytiharkan dengan betul, menyelesaikan ralat pengkompil dan memastikan kefungsian yang dimaksudkan.
Atas ialah kandungan terperinci Mengapakah Mengisytiharkan Berbilang Penunjuk Objek pada Baris Tunggal Membawa kepada Ralat Pengkompil dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!