C ++ static struct init - item不命名类型

时间:2014-11-11 17:29:13

标签: c++ struct static initialization

我试图将我的解决方案放在静态类中,其定义如下:

class myDataParser{
    private:

    public:
    struct myData{
        struct index {
            static int item1,item2,item3,item4;
        };
        static char delimiter;
    };

};

但是当我尝试在主程序中初始化项目时:

myDataParser::myData::delimiter = ';';
myDataParser::myData::index::item1 = 0;
myDataParser::myData::index::item2 = 1;
myDataParser::myData::index::item3 = 2;
myDataParser::myData::index::item4 = 3;

我收到错误:

'item1' in 'struct myDataParser::myData::index' does not name a type

......对于分隔符和item2-4也一样,我做错了什么?我该如何正确设置这些成员?

2 个答案:

答案 0 :(得分:6)

为数据类型charint等添加前缀以定义静态成员: -

char myDataParser::myData::delimiter = ';';
~~~
int myDataParser::myData::index::item1 = 0;
~~~

//....

答案 1 :(得分:2)

从标准(N3690): 的 9.4.2。 §的 2

  

在其类定义中声明静态数据成员不是   定义,除了cv-qualified之外,可能是不完整的类型   无效。 静态数据成员的定义应出现在   命名空间范围包含成员的类定义。在里面   命名空间范围内的定义,静态数据成员的名称   应使用::运算符通过其类名限定。该   静态数据成员定义中的初始化表达式   同类的范围(3.3.7)。 [示例

class process {
    static process* run_chain;
    static process* running;
};
process* process::running = get_main();
process* process::run_chain = running;
  

类进程的静态数据成员run_chain在global中定义   范围;符号process ::run_chain指定该成员   run_chain是类进程的成员,也是类的范围   处理。在静态数据成员定义中,初始化程序   表达式是指运行类进程的静态数据成员。    - 结束示例] [注意:一旦定义了静态数据成员,   即使没有创建其类的对象,它也存在。 [   示例:在上面的示例中,run_chain即使没有也存在   类进程的对象由程序创建。 - 结束示例] -   结束记录]