永发信息网

CArray<int,int>定义对象时出错!

答案:1  悬赏:80  手机版
解决时间 2021-03-11 12:24
  • 提问者网友:酱爆肉
  • 2021-03-10 15:01
CArray<int,int>定义对象时出错!
最佳答案
  • 五星知识达人网友:梦中风几里
  • 2021-03-10 15:42
因为CArray派生自 CObject。

CObject是没有复制构造函数的。
所以你必须(如果用到的话)要重写Vector类的复制构造函数和赋值操作符。。

Vector(const Vector&);
const Vector& operator=(const Vector&);追问似乎懂了。
你意思是说,这个错误的原因,并不是因为我定义的CArray的错误,而是因为我在别的地方使用了类似vector1 = vector2的语句,由于CArray没有复制构造函数,所以出错了。是吧?
这似乎也可以解释,我在另外一个类中添加了同样的语句,但是编译却不出错,因为我没有使用那个类对象的赋值操作。追答嗯 正确。

类型缺省的复制行为是 逐个复制自己的成员, 但是若是有一个成员没有可用的复制方法, 就会编译错误。

所以解决方法, 要么Vector也像CArray一样, 禁止直接复制(复制函数声明为私有), 或者定义自己的复制行为追问对C++研究不够深入,再请问下:什么时候会调用一个对象的复制构造函数呢?
比如对象A、B,A = B时会调用吧,其他还有什么情况会调用吗?
有时间再学习下复制构造函数,以前一直没注意到这个问题。因为我写的都是小程序。。。追答复制函数有 复制构造函数 和 赋值操作符。

1. 初始化的时候被调用。
V v2(v1);
V v3 = v2;

2.赋值的时候调用.
v1 = v2;

3. 作为非引用类型的参数的时候。
void func(V v) // 函数参数传递时。
void func(V& v) // 引用参数不会触发复制

4. 作为非引用类型的返回值的时候。
V func(V& v){
return v; // 返回的时候出现复制
}

V& func(V& v){
return v; // 因为返回类型是引用, 不会出现复制
}

大概就是这4个吧
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯