我对http://www.sfml-dev.org/tutorials/1.6/graphics-sprite.php
的代码感到有些困惑底部的代码详细说明了“导弹”类:
class Missile
{
public :
static bool Init(const std::string& ImageFile)
{
return Image.LoadFromFile(ImageFile);
}
Missile()
{
Sprite.SetImage(Image); // every sprite uses the same unique image
}
private :
static sf::Image Image; // shared by every instance
sf::Sprite Sprite; // one per instance
};
我正在尝试使用“Init”将文件加载到类的私有图像成员中。我试图这样做:
if (!Missile::Init("missile.bmp")) return EXIT_FAILURE;\
然后继续声明该类的对象。然而,我变得冗长,冗长的错误使我认为我不应该在那里放一个字符串,或者我错过了一些基本的东西。我对C ++有点新意,所以语法仍然令我感到困惑,我已经看了很长一段时间而无法理解它。我试过调用指针等,但我真的不知道接下来要做什么。
编辑:我得到的错误是:
main.o:在函数Ship :: Init(std :: basic_string,std :: allocator> const&)中: main.cpp :(。text._ZN4Ship4InitERKSs [Ship :: Init(std :: basic_string,std :: allocator> const&)] + 0x10):对Ship :: Image的未定义引用 main.o:在函数Ship :: Ship()中: main.cpp :(。text._ZN4ShipC2Ev [_ZN4ShipC5Ev] + 0x19):对Ship :: Image的未定义引用
答案 0 :(得分:1)
从术语长详细错误,我只是猜测你可能会对链接器错误感到困惑。那是因为,您可能忘了定义,
static sf::Image Image;
在.cpp
文件中或忘记将.cpp
文件与您的编辑内容链接在一起。
在全局范围中的相应static
文件中定义您的.cpp
成员。
sf::Image Missile::Image;