我明白了:
// 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
,并且源应该初始化它,但是我的所有尝试都出错了。有人可以告诉我这样做的正确方法吗?我错过了一些非常重要的观点吗?这是胡说八道吗?字段是静态的很重要。感谢。
答案 0 :(得分:7)
您不需要将Pos内容声明为静态。
// mouse.h
class Mouse {
private:
struct Pos {
GLfloat x;
GLfloat y;
};
static Pos last;
}
Mouse::Pos Mouse::last = { 0.0, 0.0 };
这也应该有用
答案 1 :(得分:2)
字段是静态的很重要。
然后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);