Beim Deklarieren mehrerer Objektzeiger in derselben Zeile stoßen Entwickler häufig auf ein häufiges Problem, das dazu führen kann Compilerfehler. Das Verständnis der Grundursache dieses Problems ist entscheidend, um eine korrekte Codeausführung sicherzustellen.
Bedenken Sie die folgende Klassendeklaration:
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;
In diesem Fall stellt die separate Deklaration jedes Zeigers die korrekte Funktionalität sicher. Wenn Sie jedoch versuchen, die Deklarationen in einer einzigen Zeile zusammenzufassen:
private:
sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;
Der Compiler löst einen Fehler aus:
error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))
Der Schlüssel zum Verständnis dieses Fehlers liegt im Zweck des Sternchen (*)-Operators. In C kann das Sternchen entweder einen Zeiger oder eine Dereferenzierungsoperation anzeigen. In diesem Fall sollte das Sternchen Zeiger auf sf::Sprite-Objekte anzeigen. Die obige Deklaration interpretiert das Sternchen jedoch fälschlicherweise so, dass es sich auf re_sprite_body und re_sprite_eyes bezieht und Objekte anstelle von Zeigern erstellt.
Um dieses Problem zu beheben, lautet die korrekte Syntax:
sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;
Damit Zur Klarstellung wird jeder Zeiger ordnungsgemäß deklariert, wodurch der Compilerfehler behoben und die beabsichtigte Funktionalität sichergestellt wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3