c ++:初始化成员结构的静态字段的正确方法

时间:2016-11-25 12:13:47

标签: c++ class struct static

我明白了:

// 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)是我在初始化该内容时所做的尝试。我理解标题应该声明laststatic,并且源应该初始化它,但是我的所有尝试都出错了。有人可以告诉我这样做的正确方法吗?我错过了一些非常重要的观点吗?这是胡说八道吗?字段是静态的很重要。感谢。

2 个答案:

答案 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中的静态yMouse::Pos值。

#include "mouse.h"

GLfloat Mouse::Pos::x = 10;
GLfloat Mouse::Pos::y = 10;

Mouse::Pos Mouse::last{};

wandbox example

以下断言传递:

assert(Mouse::last.x == 10);
assert(Mouse::last.y == 10);