2016-11-25 36 views
0

我得到这个: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)是我在初始化该做出的努力事情。我知道头文件应该声明laststatic,并且源代码应该初始化它,但是我的所有尝试都出错了。有人能告诉我做这种事的正确方法吗?我错过了一些非常重要的观点吗?这是无稽之谈吗?这些字段是静态的,这一点很重要。谢谢。

+1

_something一直wrong_是不是一个有用的问题说明。究竟是什么错误? –

+1

不知道你在做什么,但至少嵌入结构中的GLfloats应该不是静态的。 – DrPepperJo

+0

Pos结构被用作“命名空间”。 – KIIV

回答

7

你不需要申报名次内容为静态。

// mouse.h 

class Mouse { 
    private: 
    struct Pos { 
     GLfloat x; 
     GLfloat y; 
    };  
    static Pos last; 
} 

Mouse::Pos Mouse::last = { 0.0, 0.0 };

这应该工作太

2

这些字段是静态的,这一点很重要。

然后last将不会有任何状态。它将简单地引用Mouse::Pos中的静态xy值。

#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);