2015-11-05 70 views
0

我有一個像素結構。我想在它內部爲像BLACK和WHITE這樣的顏色去除靜態常量。我正在將所有的頭文件寫入多個cpp文件。正確的方法來創建一個類的靜態實例本身

struct Pixel 
{ 
    typedef uint16_t quantum_t; 
    static const quantum_t MAX_QUANTUM = 0xffffL; 
    static const quantum_t MIN_QUANTUM = 0; 
    static const int QUANTUM_BITS = 16; 

    quantum_t r, g, b; 

    Pixel(quantum_t r_ = 0, quantum_t g_ = 0, quantum_t b_ = 0) : 
     r(r_), g(g_), b(b_) { } 

    template<typename T> 
    static T clamp(T x) 
    { 
     return x > MAX_QUANTUM ? MAX_QUANTUM : (x < MIN_QUANTUM ? MIN_QUANTUM : x); 
    } 

    template<typename T> 
    static Pixel clamp(T r, T g, T b) 
    { 
     return Pixel(clamp(r), clamp(g), clamp(b)); 
    } 

    static const Pixel BLACK; 
    static const Pixel WHITE; 
}; 

const Pixel Pixel::BLACK(0, 0, 0); 
const Pixel Pixel::WHITE(Pixel::MAX_QUANTUM, Pixel::MAX_QUANTUM, Pixel::MAX_QUANTUM); 

最初我試圖初始化靜態黑白內結構國稅發但是我從克++誤差大約具有一個不完整的類型。一旦我在結構體之外聲明瞭靜態變量,錯誤就消失了,現在編譯代碼。這是一個只有頭文件的庫,我想知道的是如果它包含在多個cpp文件中,將聲明這樣的靜態變量會導致編譯問題?如果它被包含在多個cpp文件

+0

[在C++中定義靜態成員]的可能重複(http://stackoverflow.com/questions/3536372/defining-static-members-in-c) – Adam

回答

1

將宣告靜態變量這樣的原因編譯問題 ?

否,因爲C++標準允許這個特定使用,除非它們被聲明extern它們不會被看到,或者在其他的翻譯單元相同命名的變量的其他實例(即cpp文件)碰撞。

相關問題