1

我对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 的未定义引用

4

1 回答 1

1

从术语long verbose error来看,我只是猜测您可能对链接器错误感到困惑。那是因为,你可能忘了定义,

static sf::Image Image;

.cpp文件中或忘记将该.cpp文件与包含它的编译链接。在全局范围内static的适当.cpp文件中定义您的成员。

sf::Image Missile::Image;
于 2011-06-06T03:37:00.397 回答