在同一行宣告多個物件指標時,開發人員經常遇到一個常見問題,可能會導致編譯器錯誤。了解此問題的根本原因對於確保正確執行程式碼至關重要。
考慮以下類別聲明:
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