Déclarer plusieurs pointeurs d'objet sur une ligne de causes d'erreur du compilateur

quand je fais cela (dans ma 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;

Tout fonctionne bien. Cependant, si je change les déclarations à ceci:

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

J'obtiens cette erreur de compilateur:

error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))

Et puis il dit que les candidats pour re_sprite_eyes sont sf::Sprite objets et/ou des références.

Pourquoi n'est-ce pas le travail? Ne sont pas les déclarations de la même manière?

Vous avez découvert une propriété intéressante de C/C++ déclarations: l'astérisque appartient à la variable, pas le type. Une bonne façon de toujours vous rappeler est de mettre un espace après le type et avant l'astérisque.

OriginalL'auteur | 2012-11-29