导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

error C2248: “CObject::operator =”:无法访问 private 成员

comicwm 2010-08-13 01:37:56
/**************Files.h********************/
class CFiles
{
public:

CFiles(void)
{
}

~CFiles(void)
{
}

CFiles(CString filepa)//构造器
{
Filepath=filepa;
//filepa.ReleaseBuffer();
int pos = Filepath.ReverseFind('\\');

Filename = Filepath.Right(Filepath.GetLength()-pos-1);

}


CString GetFilepath()
{
return Filepath;
}

CString GetFilename()
{
return Filename;
}


private:
CString Filepath;//文件路径
CString Filename;//文件名
};

/**************ItemName.h****************/
class ItemName:public CObject
{
public:
ItemName(CString name)
{
int pos = name.ReverseFind('\\');
Item=name.Right(name.GetLength()-pos-1);
}
ItemName()
{}
~ItemName()
{
delete Item;
FileList.RemoveAll();
}

CString Item;
CList<CFiles,CFiles&> FileList;

};

/**********************************/
我需要使用CList<ItemName,ItemName&> ItemLst;

结果error C2248;

查了下,要重载operator =,写了半天不得其解。。。

问一下,我要重载几个operator =?该怎么重载?
...全文
767 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2010-08-13
没看到你所谓的ItemList,你只定义了一个FileList

我觉得你只贴错误号码是没有用的,要贴具体错误信息
回复
xxd_qd 2010-08-13
CFiles和ItemName都要重载operator=。
回复
你的这个ItemName要重载=
因为CList要调用到,重载=的方法任何C++教材都有
回复
comicwm 2010-08-13
。。。
谁来救救我啊!!怎么帖子沉了。。。
回复
comicwm 2010-08-13
[Quote=引用 5 楼 muzizongheng 的回复:]
CList<ItemName,ItemName&> ItemLst;

改为

CList<ItemName*,ItemName*> ItemLst;试试。
[/Quote]
这个我也是过,结果出现debug assertion failed调试了半天,也搞不定。。。
回复
comicwm 2010-08-13
[Quote=引用 4 楼 xxd_qd 的回复:]
引用 3 楼 wltg2001 的回复:
CString Item;
CList<CFiles,CFiles&amp;> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因

他的class最前面已经有public了。
class ItemName:public CObject
{
public:
.....……
[/Quote]

这个 我大概了解了,也重载过operator =,但是出现另外一个debug错误,看了半天没找到错在哪。。。
帮个忙,给个参考吧。。。
回复
muzizongheng 2010-08-13
CList<ItemName,ItemName&> ItemLst;

改为

CList<ItemName*,ItemName*> ItemLst;
试试。
回复
xxd_qd 2010-08-13
[Quote=引用 3 楼 wltg2001 的回复:]
CString Item;
CList<CFiles,CFiles&> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因
[/Quote]
他的class最前面已经有public了。
class ItemName:public CObject
{
public:
......

单看楼主贴出的这段代码,唯有CFiles下的Filepath和Filename是private的,但在这段代码里并没有什么地方从外部引用这两者,所以这些代码应该不至于引起error C2248。不过,由于CFiles和ItemName内部都有指针类型的成员变量(CString甚至CList),因此必须重载operator =进行深复制,才能对其使用CList之类的容器,否则程序的运行结果一定会出错。
回复
wltg2001 2010-08-13
CString Item;
CList<CFiles,CFiles&> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因
回复
运动健将 2010-08-13
父类应该已经重载了,是不是少调用什么LIB文件了
回复
SuperLampard 2010-08-13
坚决杜绝0回复
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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