При объявлении нескольких указателей объектов в одной строке разработчики часто сталкиваются с распространенной проблемой, которая может привести к ошибки компилятора. Понимание основной причины этой проблемы имеет решающее значение для обеспечения правильного выполнения кода.
Рассмотрим следующее объявление класса:
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