Ao declarar vários ponteiros de objeto na mesma linha, os desenvolvedores geralmente encontram um problema comum que pode levar a erros do compilador. Compreender a causa raiz desse problema é crucial para garantir a execução correta do código.
Considere a seguinte declaração de classe:
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;
Nesse caso, declarar cada ponteiro separadamente garante a funcionalidade correta. No entanto, ao tentar condensar as declarações em uma única linha:
private:
sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;
o compilador gera um erro:
error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))
A chave para entender esse erro está no propósito do operador asterisco (*). Em C, o asterisco pode indicar um ponteiro ou uma operação de desreferência. Neste caso, o asterisco deve indicar ponteiros para objetos sf::Sprite. No entanto, a declaração acima interpreta incorretamente o asterisco como aplicado a re_sprite_body e re_sprite_eyes, criando objetos em vez de ponteiros.
Para resolver esse problema, a sintaxe correta é:
sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;
Com Após este esclarecimento, cada ponteiro é devidamente declarado, resolvendo o erro do compilador e garantindo a funcionalidade pretendida.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3