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

时间:2021-11-29 09:27:44
/**************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 =?该怎么重载?

11 个解决方案

#1


坚决杜绝0回复

#2


父类应该已经重载了,是不是少调用什么LIB文件了

#3


CString Item;
CList<CFiles,CFiles&> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因

#4


引用 3 楼 wltg2001 的回复:
CString Item;
CList<CFiles,CFiles&amp;> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因

他的class最前面已经有public了。
class ItemName:public CObject
{
public:
......

单看楼主贴出的这段代码,唯有CFiles下的Filepath和Filename是private的,但在这段代码里并没有什么地方从外部引用这两者,所以这些代码应该不至于引起error C2248。不过,由于CFiles和ItemName内部都有指针类型的成员变量(CString甚至CList),因此必须重载operator =进行深复制,才能对其使用CList之类的容器,否则程序的运行结果一定会出错。

#5


CList<ItemName,ItemName&> ItemLst;

改为

CList<ItemName*,ItemName*> ItemLst;
试试。

#6


引用 4 楼 xxd_qd 的回复:
引用 3 楼 wltg2001 的回复:
CString Item;
CList<CFiles,CFiles&amp;amp;> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因

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


这个 我大概了解了,也重载过operator =,但是出现另外一个debug错误,看了半天没找到错在哪。。。
帮个忙,给个参考吧。。。

#7


引用 5 楼 muzizongheng 的回复:
CList<ItemName,ItemName&amp;> ItemLst;

改为

CList<ItemName*,ItemName*> ItemLst;试试。

这个我也是过,结果出现debug assertion failed调试了半天,也搞不定。。。

#8


。。。
谁来救救我啊!!怎么帖子沉了。。。

#9


你的这个ItemName要重载=
因为CList要调用到,重载=的方法任何C++教材都有

#10


CFiles和ItemName都要重载operator=。

#11


没看到你所谓的ItemList,你只定义了一个FileList

我觉得你只贴错误号码是没有用的,要贴具体错误信息

#1


坚决杜绝0回复

#2


父类应该已经重载了,是不是少调用什么LIB文件了

#3


CString Item;
CList<CFiles,CFiles&> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因

#4


引用 3 楼 wltg2001 的回复:
CString Item;
CList<CFiles,CFiles&amp;> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因

他的class最前面已经有public了。
class ItemName:public CObject
{
public:
......

单看楼主贴出的这段代码,唯有CFiles下的Filepath和Filename是private的,但在这段代码里并没有什么地方从外部引用这两者,所以这些代码应该不至于引起error C2248。不过,由于CFiles和ItemName内部都有指针类型的成员变量(CString甚至CList),因此必须重载operator =进行深复制,才能对其使用CList之类的容器,否则程序的运行结果一定会出错。

#5


CList<ItemName,ItemName&> ItemLst;

改为

CList<ItemName*,ItemName*> ItemLst;
试试。

#6


引用 4 楼 xxd_qd 的回复:
引用 3 楼 wltg2001 的回复:
CString Item;
CList<CFiles,CFiles&amp;amp;> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因

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


这个 我大概了解了,也重载过operator =,但是出现另外一个debug错误,看了半天没找到错在哪。。。
帮个忙,给个参考吧。。。

#7


引用 5 楼 muzizongheng 的回复:
CList<ItemName,ItemName&amp;> ItemLst;

改为

CList<ItemName*,ItemName*> ItemLst;试试。

这个我也是过,结果出现debug assertion failed调试了半天,也搞不定。。。

#8


。。。
谁来救救我啊!!怎么帖子沉了。。。

#9


你的这个ItemName要重载=
因为CList要调用到,重载=的方法任何C++教材都有

#10


CFiles和ItemName都要重载operator=。

#11


没看到你所谓的ItemList,你只定义了一个FileList

我觉得你只贴错误号码是没有用的,要贴具体错误信息