首页
社区
课程
招聘
[求助]MFC 不支持 默认拷贝构造函数???
发表于: 2008-11-24 22:29 7056

[求助]MFC 不支持 默认拷贝构造函数???

2008-11-24 22:29
7056
我記得在C++是有个 默认拷贝构造函数的.

即:
class mycls
{
    ......
};

mycls a;
mycls b;

a=b;  //这是可以通过的..

但是,当我在MFC 下,用了如下代码:
CDialog a;
CDialog b;

a=b; 却出现如下错误...
'operator =' function is unavailable

这是不是意味着,MFC不支持 默认拷贝构造函数??????????????

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
()()()()()
2008-11-25 00:18
0
雪    币: 454
活跃值: (1673)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3

CDialog a;
CDialog b;

a=b;

你这是赋值,哪来的复制构造……

CDialog a;
CDialog b(a);

这样才是……
2008-11-25 01:12
0
雪    币: 267
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
仁兄,不知道你自己有没有试过...

我试过了,出现以下错误:
error C2558: class 'CDialog' : no copy constructor available

我说过自定义的类 中:
mycls a;
mycls b;

a=b;  //这是可以通过的..
2008-11-25 01:16
0
雪    币: 267
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
请问这是什么意思?????
2008-11-25 01:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝
构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,
C++编译器将自动为A 产生四个缺省的函数,如
A(void); // 缺省的无参数构造函数
A(const A &a); // 缺省的拷贝构造函数
~A(void); // 缺省的析构函数
A & operate =(const A &a); // 缺省的赋值函数
这不禁让人疑惑,既然能自动生成函数,为什么还要程序员编写?
原因如下:
(1)如果使用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初
始化”和“清除”的机会,C++发明人Stroustrup 的好心好意白费了。
(2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”
的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。

拷贝构造函数和赋值函数非常容易混淆,常导致错写、错用。拷贝构造函数是在对
象被创建时调用的,而赋值函数只能被已经存在了的对象调用。以下程序中,第三
个语句和第四个语句很相似,你分得清楚哪个调用了拷贝构造函数,哪个调用了赋
值函数吗?
String a(“hello”);
String b(“world”);
String c = a; // 调用了拷贝构造函数,最好写成 c(a);
c = b; // 调用了赋值函数
本例中第三个语句的风格较差,宜改写成String c(a) 以区别于第四个语句。

mycls a;
mycls b=a;//拷贝构造函数

mycls a;
mycls b;

b=a;//赋值函数

附件中有高质量c++编程指南:看第九章。
上传的附件:
2008-11-25 10:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
error C2558: class 'CDialog' : no copy constructor available
这个错误是没有可以用的复制构造器。。。
难道真的是没有默认构造函数

'operator =' function is unavailable
这个应该是操作符 无效
2008-11-25 13:02
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
8
CObject中的复制与赋值函数都是私有的.
2008-11-25 14:16
0
雪    币: 267
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
确定吗??????????????
2008-11-25 17:15
0
雪    币: 267
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
老兄,很感谢你,让我知道了 赋值函数和拷贝构造函数的区别,可以,要是这样的话..

也不该编译出错啊.....

MFC 到底支持不支持 默认拷贝构造函数(或赋值函数)???
2008-11-25 17:18
0
雪    币: 63
活跃值: (17)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
MFC是类库
基于C++
C++语言支持默认拷贝构造函数
2008-11-25 22:34
0
雪    币: 267
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
这是个什么意思??????
2008-11-26 10:13
0
游客
登录 | 注册 方可回帖
返回
//