我定义了一个结构体
typedef struct{
int intval;
CStringArray &strArrVal;
}TYPEval;然后想用它构造一个map
map<CString ,TYPEval  > paramap;当用结构体定义变量时 TYPEval m_TYPEval 报错:c2512 没有默认的构造函数。我大致知道是CStringArray  的原因。但是不知道怎么改?
请高手指点,不胜感激!

解决方案 »

  1.   

    CStringArray &strArrVal;改成CStringArray  *pArray;
      

  2.   

    同意版主意见,确实引用(CStringArray &strArrVal)必需在声明的时候初始化的,也不建议楼主使用指针,直接用“CStringArray strArrVal”作为结构体变量就行了。
      

  3.   

    to:版主
    当我定义为指针后,用到pArray.add(str);时。报错:AFXCOLL_INLINE_INT_PTR CStringArray::add(LPCTSTR newElement)
    {
       
    }
      

  4.   


    我之前用的是就是像你说的那样,直接用的CStringArray strArrVal。
    但会报错c2248 无法访问private成员
    才改为引用的
      

  5.   

    从CObject派生的类,是不支持直接赋值的,因为CObject的拷贝构造和operator = 都是私有的,父类的拷贝构造都会调用到子类的拷贝构造。CObject的派生类对象在参数传递时都是传引用或指针,综上你一定要用CStringArray的话还是用指针吧,如果用引用,还得注意原数据(用来初始化引用的数据)的生存期,稍不注意就挂了。也没必要非要用CStringArray ,用个vector或者list都可以。
      

  6.   


    当我定义为指针后,用到pArray.add(str);时。报错:AFXCOLL_INLINE_INT_PTR CStringArray::add(LPCTSTR newElement)
    {
       
    }
      

  7.   

    不会用就用vector<CString>代替CStringArray 
      

  8.   

    指针应该这样用
    pArray->add