我把一个结构体声明类的一个public成员,然后在类的初始化函数中用此结构声明一个变量,调试运行的时候报错说该结构体没有可用的默认构造函数,这是怎么回事?

解决方案 »

  1.   

    如果你的结构有构造函数,而构造函数又有非缺省的参数列表,就会这样
    对于这样的结构,你必须用初始化列表来初始化他如
    struct myStruct{
      int a;
      myStruct{ int a_}{a=a_;};
    };class MyClass{
    myStruct s;
       public:
            MyClass(int p):s(p){}; //<--注意这样的,C++教材一定说过};
      

  2.   

    我的结构体是这样写的:
    public: struct DATAINFO
    {
    int ID;
    int InfoType;
    CString InfoID;
    };
    };
    这样声明变量的
    DATAINFO *pDataInfo=new DATAINFO;
      

  3.   

    我这样改正之后我之前发生的问题就没了:
    public:
     struct DATAINFO
     { 
    int ID;
     int InfoType; 
    CString InfoID;
    DATAINFO()
    {
       ID=0;
       InfoType=0;
       InfoID="";
    }
     };而你们都说之前的代码没有问题,这是为何?
      

  4.   

    我将你的结构放在我的程序里面,调试通过。
    其实,你的写法是MFC中许多类(如CPtrList等)的常用手法。
    结构不需要构造函数的,不明白你怎么会有这样的结果。