我试图将我的解决方案放在静态类中,其定义如下:
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也一样,我做错了什么?我该如何正确设置这些成员?
答案 0 :(得分:6)
为数据类型char
,int
等添加前缀以定义静态成员: -
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
即使没有也存在 类进程的对象由程序创建。 - 结束示例] - 结束记录]