请教一个动态创建数组的问题

littlefangMFC 2009-06-05 09:00:04
我动态创建了一个框架类的动态数组,如下所示:
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的语法基础比较差,请高手耐心指教
...全文
50 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiboys 2009-06-09
  • 打赏
  • 举报
回复
CDllFrame *m_pDllFrame[3] = new CDllFrame[3]; //这个很搞笑,好好学习下语法啊
hiboys 2009-06-09
  • 打赏
  • 举报
回复
数组 的使用
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;





zq178365969 2009-06-09
  • 打赏
  • 举报
回复
(m_pDllFrame+2) 是一个不可更改的指针
littlefangMFC 2009-06-09
  • 打赏
  • 举报
回复
谢谢各位朋友
danxuezx 2009-06-06
  • 打赏
  • 举报
回复
第二个错误很明显,不是都说了您的赋值语句左边不是左值吗?您的语句相当于3=2
jingzhongrong 2009-06-05
  • 打赏
  • 举报
回复
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;


wocow3 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 littlefangMFC 的回复:]
引用 13 楼 wocow3 的回复:

怎么能这么写。。
应该是*(m_pDllFrame+2) = p;或者m_pDllFrame[2] = p;

m_pDllFrame+2不是一个左值表达式,只有左值表达式才能取到地址被赋值

你说的两种方式都是不可以的哦,提示'operator =' function is unavailable
[/Quote]
sorry,看走眼了,数组成员不是指针。。
CDllFrame *m_pDllFrame = new CDllFrame[3];
你想只改变第二个,可以自己定义下CDllFrame类的operate=运算符
littlefangMFC 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wocow3 的回复:]
怎么能这么写。。
应该是*(m_pDllFrame+2) = p;或者m_pDllFrame[2] = p;

m_pDllFrame+2不是一个左值表达式,只有左值表达式才能取到地址被赋值
[/Quote]
你说的两种方式都是不可以的哦,提示'operator =' function is unavailable
wocow3 2009-06-05
  • 打赏
  • 举报
回复
怎么能这么写。。
应该是*(m_pDllFrame+2) = p;或者m_pDllFrame[2] = p;

m_pDllFrame+2不是一个左值表达式,只有左值表达式才能取到地址被赋值
littlefangMFC 2009-06-05
  • 打赏
  • 举报
回复
谢谢zoulie
littlefangMFC 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 skyxie 的回复:]
引用 9 楼 littlefangMFC 的回复:
引用 4 楼 fengrx 的回复:
CDllFrame *m_pDllFrame = new CDllFrame;
CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
m_pDllFrame[2] = p;


你解释下吗,第一句话和第二句话是什么关系啊



第一句话应该扔掉
[/Quote]
CDllFrame *m_pDllFrame = new CDllFrame[3];

CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
有什么区别啊,多谢你啦
skyxie 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 littlefangMFC 的回复:]
引用 4 楼 fengrx 的回复:
CDllFrame *m_pDllFrame = new CDllFrame;
CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
m_pDllFrame[2] = p;


你解释下吗,第一句话和第二句话是什么关系啊
[/Quote]

第一句话应该扔掉
littlefangMFC 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fengrx 的回复:]
CDllFrame *m_pDllFrame = new CDllFrame;
CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
m_pDllFrame[2] = p;
[/Quote]
你解释下吗,第一句话和第二句话是什么关系啊
littlefangMFC 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 skyxie 的回复:]

你定义变量的时候就有问题 CDllFrame *m_pDllFrame = new CDllFrame[3];
CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
然后直接使用
m_pDllFrame[2] = p;
[/Quote]
我没太看明白你的意思啊,是说应该这样定义吗:
CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
然后直接使用
m_pDllFrame[2] = p;
littlefangMFC 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bragi523 的回复:]
引用楼主 littlefangMFC 的帖子:
CDllFrame* p = new CDllFrame;
(m_pDllFrame+2) = p;




这是给谁赋值啊?m_pDllFrame?
为什么不是直接
m_pDllFrame[2] = new CDllFrame;
[/Quote]
这样不行啊,提示error C2582: 'CDllFrame' : 'operator =' function is unavailable
zoulie 2009-06-05
  • 打赏
  • 举报
回复
表达式是不能赋值的。。。
zoulie 2009-06-05
  • 打赏
  • 举报
回复
你这样会有内存泄露,m_pDllFrame+2没有释放,而指针指向了另一快内存区
fengrx 2009-06-05
  • 打赏
  • 举报
回复
CDllFrame *m_pDllFrame = new CDllFrame;
CDllFrame *m_pDllFrame[3] = new CDllFrame[3];
m_pDllFrame[2] = p;
dch4890164 2009-06-05
  • 打赏
  • 举报
回复
m_pDllFrame[2] = p;
比较有创意,呵呵原因还真有点说不上来,应当是不能对表达式赋值吧
bragi523 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 littlefangMFC 的帖子:]
CDllFrame* p = new CDllFrame;
(m_pDllFrame+2) = p;

[/Quote]

这是给谁赋值啊?m_pDllFrame?
为什么不是直接
m_pDllFrame[2] = new CDllFrame;
加载更多回复(1)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧