같은 줄에 여러 개체 포인터를 선언할 때 개발자는 다음과 같은 일반적인 문제에 직면하는 경우가 많습니다. 컴파일러 오류. 올바른 코드 실행을 보장하려면 이 문제의 근본 원인을 이해하는 것이 중요합니다.
다음 클래스 선언을 고려하세요.
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