在同一行上声明多个对象指针时,开发人员经常遇到一个常见问题,可能会导致编译器错误。了解此问题的根本原因对于确保正确执行代码至关重要。
考虑以下类声明:
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