」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼在一行上宣告多個物件指標會導致 C++ 中的編譯器錯誤?

為什麼在一行上宣告多個物件指標會導致 C++ 中的編譯器錯誤?

發佈於2024-11-09
瀏覽:756

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

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

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

考慮以下類別聲明:

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;

在這種情況下,單獨聲明每個指標可確保正確的功能。但是,當嘗試將聲明壓縮為一行時:

private:
    sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;

編譯器拋出錯誤:

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,創建物件而不是指標。

要解決這個問題,正確的語法是:

sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;

有了這個澄清,每一個澄清,每了每一個澄清,每個指標都被正確聲明,解決編譯器錯誤並確保預期的功能。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3