error C2552: 'public: static struct demo CMLDlg::general' : non-aggregates cannot be initialized with initializer list还有如果一个结构的各个分量都是字符串,这个结构(静态的)该怎么定义和初始化呢?
谢谢!

解决方案 »

  1.   

    .h中
    struct demo
    {
    CString sky;
    CString air;
    CString hum;
    CString wind;
    CString water;
    CString forecast;
    };
    static demo special;
    static demo general;.cpp中
    demo CMLDlg::general={"?","?","?","?","?","?"};
    demo CMLDlg::special={"NULL","NULL","NULL","NULL","NULL","NULL"};
      

  2.   

    结构体和数组在定义&初始化的时候才可以用{}.
    int a[3] = {0}; //valid
    int a[3];  a[3] = {0}; //invalid
      

  3.   

    像这样是可以的
    demo demo1 = {"NULL","NULL","NULL","NULL","NULL","NULL"};
    这样是不行的
    demo demo1;
    demo1 = {"NULL","NULL","NULL","NULL","NULL","NULL"};
      

  4.   

    也就是说,如果你要用{}方式初始化,就必须把变量声明和初始化放在一起。
    如:static demo special= {"NULL","NULL","NULL","NULL","NULL","NULL"};
    否则你只能一个一个的去赋值了。
      

  5.   

    pripor(蹲在墙头等红杏)
    general是类的成员??对,可以吗?
      

  6.   

    to frankzch(西方失败)
    照你的改了之后,它就不识别special和general了
      

  7.   

    可以给结构体提供构造函数,如:
    demo::demo(CString str1, CString str2, ....)
    {
        sky = str1;
        air = str2;
        ....
    }
    在类外定义类静态变量的时候不能用"={}",要使用(str1, str2).这样就可以了.
    另外,即使写
    demo demo1 = {"NULL","NULL","NULL","NULL","NULL","NULL"};
    也是不合法的.在C++中结构体既等同于类,又要与C结构体相兼容.所以C++的结构是很糟糕的东西.
    如果结构体内包含的都是C风格的数据成员"={}"是合法的,C++编译器把他当C风格结构看待.如果结构内包含类数据成员(可以是类和结构),那么"={}"就是不合法的,C++编译器把他当类看待.