首頁 >後端開發 >C++ >為什麼在一行上聲明多個物件指標會導致 C 語言編譯器錯誤?

為什麼在一行上聲明多個物件指標會導致 C 語言編譯器錯誤?

Linda Hamilton
Linda Hamilton原創
2024-10-27 11:29:29930瀏覽

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

在一行上宣告多個物件指標:解決編譯器錯誤

在同一行上宣告多個物件指標時,開發人員常常會遇到一個常見問題,可能會導致編譯器錯誤。了解此問題的根本原因對於確保正確執行程式碼至關重要。

考慮以下類別聲明:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn