Простой вопрос SFML / C ++, перепутанный с литеральными строками и статическими членами - PullRequest
1 голос
/ 06 июня 2011

Меня немного смущает код на http://www.sfml -dev.org / tutorials / 1.6 / graphics-sprite.php

А именно код внизу с подробным описаниемclass "Missile":

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

1 Ответ

1 голос
/ 06 июня 2011

Из термина длинная многословная ошибка , я просто предполагаю, что вы могли быть смущены ошибкой компоновщика. Это потому, что вы, возможно, забыли определить,

static sf::Image Image;

в файле .cpp или забыл связать этот файл .cpp с вашей компиляцией, где он включен. Определите ваш static член в соответствующем .cpp файле в global scope .

sf::Image Missile::Image;
...