Về cơ bản những gì tôi muốn làm là lưu trữ tham chiếu đến hoạt ảnh động của một sprite như một thành viên riêng tư trong lớp Actor. Tôi muốn sử dụng một tham chiếu vì vậy tôi không phải thực sự tạo ra các hình ảnh động nhiều lần nhưng tôi tiếp tục nhận được một lỗi.Thành viên tham chiếu Uninitialized
diễn viên khai báo lớp:
class Actor
{
public:
Actor();
~Actor();
void setActiveAnimation(Animation anim);
void draw(sf::RenderWindow& win);
private:
sf::Sprite sprite;
MaJR::Animation& activeAnimation;
};
thi lớp Diễn viên:
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();
}
sản lượng xây dựng:
/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 ===|
Phân tích của bạn là tốt, nhưng tôi không thể đưa ra câu trả lời bằng mã lưu trữ địa chỉ của tham số được chuyển qua tham chiếu. Nếu bạn đang lưu trữ một con trỏ để sử dụng sau này, hãy chấp nhận một tham số con trỏ, để làm cho người gọi nhận thức rõ hơn về những cân nhắc suốt đời. –
@Ben Voigt: Tôi sẽ không biết, tôi không sử dụng _raw pointers_ trong mã của tôi cả. –
Tôi đồng ý rằng con trỏ thô không tốt bằng con trỏ thông minh. Nhưng một tham chiếu là tồi tệ hơn nhiều. 1 để sửa chữa. –