在同一行上宣告多個物件指標時,開發人員常常會遇到一個常見問題,可能會導致編譯器錯誤。了解此問題的根本原因對於確保正確執行程式碼至關重要。
考慮以下類別聲明:
<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>
在這種情況下,單獨聲明每個指標可確保正確的功能。但是,當嘗試將聲明壓縮為一行時:
<code class="cpp">private: sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;</code>
編譯器會引發錯誤:
error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))
理解此錯誤的關鍵在於星號的用途(*) 操作員。在 C 中,星號可以指示指標或取消引用操作。在本例中,星號應指示指向 sf::Sprite 物件的指標。但是,上面的聲明錯誤地將星號解釋為應用於 re_sprite_body 和 re_sprite_eyes,創建物件而不是指標。
要解決此問題,正確的語法是:
<code class="cpp">sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;</code>
在此澄清,每個指針都被正確聲明,解決了編譯器錯誤並確保了預期的功能。
以上是為什麼在一行上聲明多個物件指標會導致 C 語言編譯器錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!