2015-07-13 49 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