我动态创建了一个框架类的动态数组,如下所示:
CDllFrame *m_pDllFrame = new CDllFrame[3];我通过这样将三个自带有框架类、文档类和视类的窗体封装到了DLL中,但当我关闭其中一个窗体时(如关闭m_pDllFrame[2]这个窗体),由于框架类有自我销毁的功能,在该窗体关闭以后,m_pDllFrame[2]指针甚至都不存在了,这时我想再创建一个
框架类的事例,并将它赋给m_pDllFrame指针为什么老是编译通不过?
CDllFrame* p = new CDllFrame;
(m_pDllFrame+2) = p;则老是提示error C2106: '=' : left operand must be l-value
C的语法基础比较差,请高手耐心指教

解决方案 »

  1.   

    1.
    m_pDllFrame[2]指针甚至都不存在了
    ---
    不可能,指针变量本身存在;它指向的对象销毁了2.
    (m_pDllFrame+2) = p;
    --
    你定义变量的时候就有问题 CDllFrame *m_pDllFrame = new CDllFrame[3];
    CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
    然后直接使用
    m_pDllFrame[2] = p;
      

  2.   


    这是给谁赋值啊?m_pDllFrame?
    为什么不是直接
    m_pDllFrame[2] =  new CDllFrame;
      

  3.   

    m_pDllFrame[2] = p;
    比较有创意,呵呵原因还真有点说不上来,应当是不能对表达式赋值吧
      

  4.   

    CDllFrame *m_pDllFrame = new CDllFrame;
    CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
    m_pDllFrame[2] = p;
      

  5.   

    你这样会有内存泄露,m_pDllFrame+2没有释放,而指针指向了另一快内存区
      

  6.   

    这样不行啊,提示error C2582: 'CDllFrame' : 'operator =' function is unavailable
      

  7.   

    我没太看明白你的意思啊,是说应该这样定义吗:
    CDllFrame *m_pDllFrame[3] = new CDllFrame[3]; 
    然后直接使用 
    m_pDllFrame[2] = p;
      

  8.   

    CDllFrame *m_pDllFrame = new CDllFrame[3]; 

    CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
    有什么区别啊,多谢你啦 
      

  9.   

    怎么能这么写。。
    应该是*(m_pDllFrame+2) = p;或者m_pDllFrame[2] = p;m_pDllFrame+2不是一个左值表达式,只有左值表达式才能取到地址被赋值
      

  10.   

    你说的两种方式都是不可以的哦,提示'operator =' function is unavailable
      

  11.   

    sorry,看走眼了,数组成员不是指针。。
    CDllFrame *m_pDllFrame = new CDllFrame[3];
    你想只改变第二个,可以自己定义下CDllFrame类的operate=运算符
      

  12.   

    CDllFrame *m_pDllFrame = new CDllFrame[3]; //创建了一个CDllFrame的对象数组
    CDllFrame* p = new CDllFrame;   //创建了一个CDllFrame对象实例,指针p指向它
    (m_pDllFrame+2) = p;  //不是左值表达式,不能赋值,修改成m_pDllFrame[2] = p后将对象指针赋值给对象,没有对应的=操作符可以改成传递指针或者使用引用:
    typedef CDllFrame *PCDllFrame;
    PCDllFrame *m_pDllFrame = new PCDllFrame[3];CDllFrame* p = new CDllFrame; 
    m_pDllFrame[2] = p;
      

  13.   

    (m_pDllFrame+2) 是一个不可更改的指针
      

  14.   

    数组 的使用
    1.指针法
    int *pInt= new int[3]; 
    *(++pInt)=1;2.地址法
    int *pInt= new int[3]; 
    *(&pInt[0]+1) =1;3.下标法
    int *pInt= new int[3]; 
    pInt[1]=1;
      

  15.   

    CDllFrame *m_pDllFrame[3] = new CDllFrame[3]; //这个很搞笑,好好学习下语法啊