Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-10-27 11:29:29
asal
930 orang telah melayarinya

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

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

pengkompil menimbulkan ralat:

error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))
Salin selepas log masuk

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

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!

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