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

在类中添加数据成员private:CArray<int,int>treeData;则编译时出现以下错误:errorC2248:“CObject::CObject”:无法访... 在类中添加数据成员
private:
CArray<int,int> treeData;
则编译时出现以下错误:
error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
其中,并未在源文件中对此成员treeData进行任何操作。
注释掉此句后,编译通过。
实在想不明白为什么。
上述描述只是说明了问题原型而已,可能不足以说明问题。完整说明如下:

头文件1. Vector.h
#pragma once
#include "Vertex.h"
#include <afxtempl.h>
class Vector
{
public:
Vector(void);
~Vector(void);
Vector(Vertex vertex);
Vector(double x,double y,double z);
private:
CArray<int,int&> ads; //此行导致错误
};
当添加此行CArray<int,int&> ads;后,就会出现编译错误如下:
error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
若改成CArray<int,int> ads;后,仍然是相同的错误。
其中,为做测试,只是在类中定义了此成员变量而已,在源文件中未对此成员进行任何操作。
若把此句注释掉,则编译成功,没有错误。
展开
 我来答
Bk0X
2013-05-03 · TA获得超过9413个赞
知道小有建树答主
回答量:1217
采纳率:60%
帮助的人:673万
展开全部
因为CArray派生自 CObject。

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

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

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

所以解决方法, 要么Vector也像CArray一样, 禁止直接复制(复制函数声明为私有), 或者定义自己的复制行为
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式