Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Mengisytiharkan Berbilang Penunjuk Objek pada Baris Tunggal Membawa kepada Ralat Pengkompil dalam C?

Mengapakah Mengisytiharkan Berbilang Penunjuk Objek pada Baris Tunggal Membawa kepada Ralat Pengkompil dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 11:29:29821semak imbas

Why Does Declaring Multiple Object Pointers on a Single Line Lead to Compiler Errors in C  ?

Mengisytiharkan Berbilang Penunjuk Objek pada Satu Baris: Membongkar Ralat Pengkompil

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!

Kenyataan:
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