«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему объявление нескольких указателей объектов в одной строке приводит к ошибкам компилятора в C++?

Почему объявление нескольких указателей объектов в одной строке приводит к ошибкам компилятора в C++?

Опубликовано 9 ноября 2024 г.
Просматривать:853

Why Does Declaring Multiple Object Pointers on a Single Line Lead to Compiler Errors in C  ?

Объявление нескольких указателей объектов в одной строке: раскрытие ошибки компилятора

При объявлении нескольких указателей объектов в одной строке разработчики часто сталкиваются с распространенной проблемой, которая может привести к ошибки компилятора. Понимание основной причины этой проблемы имеет решающее значение для обеспечения правильного выполнения кода.

Рассмотрим следующее объявление класса:

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