2015-07-13 60 views
1

我需要聲明結構的類成員陣列理想地初始化在聲明這樣的:聲明結構的一個類的成員陣列(C++ 98)

class Foo 
{ 
    typedef struct _TMember 
    { 
     uint16 m_key; 
     uint16 m_val; 
    } 
    TMember; 

    TMember m_member_tab[] = 
    { 
     { 10, 2400}, 
     { 20, 2500}, 
     { 30, 2600}, 
     { 40, 2700}, 
     { 50, 2650}, 
    }; 

    // etc... 
}; 

可這在傳統的C來完成++( pre C++ 11)類頭?

編輯:如果不是這樣,這將是一個很好的選擇?將數組作爲類成員是很好的,但否則它可以在一個公共頭文件中定義。使用

+1

你必須牢記[命名規則](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier)和一個定義規則,但它的工作原理如圖所示。 – chris

+4

這是C還是C++? 錯誤: –

+0

我在C++頭使用這些declation時得到這個誤差的大括號內的初始值設定在此不之前允許「{」令牌 – artm

回答

3

靜態類變量具有在實現文件被初始化,頭部的外部。

用C++ 11,在一流的初始化工作,如果靜態類變量是constexpr

#include <iostream> 

class Foo{ 
    public: 
    struct TMember //can't start with an underscore; typedef unecessary in C++ 
    { 
    unsigned short m_key; 
    unsigned short m_val; 
    }; 
    constexpr static TMember m_member_tab[]={ 
    { 10, 2400}, 
    { 20, 2500}, 
    { 30, 2600}, 
    { 40, 2700}, 
    { 50, 2650}, 
    }; 
}; 
int main() 
{ 
    using namespace std; 
    cout<<Foo::m_member_tab[1].m_val<<endl; 
} 

老C++:

#include <iostream> 

class Foo{ 
    public: 
    struct TMember //can't start with underscore; typedef unecessary in C++ 
    { 
    unsigned short m_key; 
    unsigned short m_val; 
    }; 
    static TMember m_member_tab[5]; 
}; 
//End of header, start of implementation 

Foo::TMember Foo::m_member_tab[] = { 
    { 10, 2400}, 
    { 20, 2500}, 
    { 30, 2600}, 
    { 40, 2700}, 
    { 50, 2650}, 
    }; 
int main() 
{ 
    using namespace std; 
    cout<<Foo::m_member_tab[1].m_val<<endl; 
} 
+0

謝謝。但正如我在Q中提到的那樣,是否可以用傳統的C++(即pre C++ 11)來完成。如果不是,有沒有好的選擇? – artm

+1

添加了C++ 98版本。 – PSkocik

+0

你不能在C++ 98個文件複雜的數據結構,但你可以定義整型常量和/或在C++ 98類聲明枚舉所以也許你能以某種方式與那些模仿你的表...否則,靜態數據必須超出頭部,否則需要更新編譯器。 – PSkocik