Fondamentalmente ciò che voglio fare è memorizzare il riferimento all'animazione attiva di uno sprite come membro privato nella classe attore. Voglio usare un riferimento quindi non devo creare effettivamente l'animazione più volte ma continuo a ricevere un errore.Membro di riferimento non inizializzato
Attore dichiarazione di classe:
class Actor
{
public:
Actor();
~Actor();
void setActiveAnimation(Animation anim);
void draw(sf::RenderWindow& win);
private:
sf::Sprite sprite;
MaJR::Animation& activeAnimation;
};
implementazione della classe Attore:
Actor::Actor()
{
// constructor
}
Actor::~Actor()
{
// destructor
}
void Actor::setActiveAnimation(Animation anim)
{
activeAnimation = anim;
activeAnimation.gotoStart();
}
void Actor::draw(sf::RenderWindow& win)
{
sprite.setTexture(activeAnimation.getActiveFrame());
win.draw(sprite);
activeAnimation.nextFrame();
}
uscita Corporatura:
/home/mike/MaJR Game Engine/src/Actor.cpp||In constructor 'MaJR::Actor::Actor()':|
/home/mike/MaJR Game Engine/src/Actor.cpp|8|error: uninitialized reference member 'MaJR::Actor::activeAnimation' [-fpermissive]|
||=== Build finished: 1 errors, 0 warnings ===|
L'analisi è buona, ma non posso revocare una risposta con codice che memorizza l'indirizzo di un parametro passato per riferimento. Se si sta memorizzando un puntatore per uso futuro, accettare un parametro puntatore, per rendere il chiamante più consapevole delle considerazioni sulla durata. –
@Ben Voigt: non saprei, non uso affatto _raw pointers_ nel mio codice. –
Sono d'accordo sul fatto che un puntatore raw non è buono come un puntatore intelligente. Ma un riferimento è molto peggio. +1 per la correzione. –