2016-11-25 35 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);