Член статического класса C ++ - синтаксическая ошибка - PullRequest
1 голос
/ 20 октября 2011

У меня есть этот код: (BITMAPS это свободное имя)

class BITMAPS{
public:
    static ALLEGRO_BITMAP *cursor;

    static void load_bitmaps();
    static void unload_bitmaps();
};

и я пытаюсь использовать это так: ( строки с ошибками )

line 9:   BITMAPS.load_bitmaps();
line 23:  BITMAPS.unload_bitmaps();
line 36:  BITMAPS.cursor;

но я получаю такие ошибки: ( ошибки )

line 9 and 23:    syntax error : missing ';' before '.'
line 36:          token '.' is illegal after UDT 'BITMAPS'
line 36:          'BITMAPS' : illegal use of this type as an expression
line 36:          left of '.cursor' must have class/struct/union

в чем проблема?

EDIT:

Я изменил . на :: и теперь я получаю это:

unresolved external symbol "public: static struct ALLEGRO_BITMAP * BITMAPS::cursor" (?cursor@BITMAPS@@2PAUALLEGRO_BITMAP@@A)

что это значит?

1 Ответ

11 голосов
/ 20 октября 2011

Вам нужно использовать оператор Scope Resolution :: для ссылки на них, а не на используемый вами синтаксис.

BITMAPS::load_bitmaps();
BITMAPS::unload_bitmaps();
BITMAPS::cursor;

РЕДАКТИРОВАТЬ: Чтобы ответить на ваш обновленный Q

Вы просто объявили статический член cursor. Вам также необходимо определить его в исходном (cpp) файле.
как:

ALLEGRO_BITMAP* BITMAPS::cursor = 0;

Хорошо прочитано:
что значит иметь неопределенную ссылку на статический член?

Предложение:
Вы должны прочитать хорошую книгу по C ++.

...