C++: правильный способ инициализации статических полей члена структуры
Я получил это:
// mouse.h
class Mouse {
private:
struct Pos {
static GLfloat x;
static GLfloat y;
};
static Pos last;
}
и это:
// mouse.cpp
// 1)
Mouse::Pos Mouse::last = {};
// 2)
Mouse::Pos Mouse::last = { 0.0, 0.0 };
// 3)
Mouse::last.x = 0.0f;
Mouse::last.y = 0.0f;
1)
, 2)
а также 3)
это попытки, которые я предпринял для инициализации этой вещи. Я понимаю, что заголовок должен объявить, что last
является static
и что источник должен его инициализировать, но что-то не так со всеми моими попытками. Может кто-нибудь сказать, пожалуйста, правильный способ сделать такую вещь? Я упускаю какой-то очень важный момент? Это чепуха? Важно, чтобы поля были статическими. Благодарю.
2 ответа
Решение
Вам не нужно объявлять содержимое Pos как статическое.
// mouse.h
class Mouse {
private:
struct Pos {
GLfloat x;
GLfloat y;
};
static Pos last;
}
Mouse::Pos Mouse::last = { 0.0, 0.0 };
Это должно работать тоже
Важно, чтобы поля были статическими.
затем last
не будет никакого государства. Это будет просто относиться к статическому x
а также y
значения внутри Mouse::Pos
,
#include "mouse.h"
GLfloat Mouse::Pos::x = 10;
GLfloat Mouse::Pos::y = 10;
Mouse::Pos Mouse::last{};
Следующие утверждения проходят:
assert(Mouse::last.x == 10);
assert(Mouse::last.y == 10);