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,可能是这个原因
CList<CFiles,CFiles&> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因
#4
他的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;试试。
改为
CList<ItemName*,ItemName*> ItemLst;试试。
#6
这个 我大概了解了,也重载过operator =,但是出现另外一个debug错误,看了半天没找到错在哪。。。
帮个忙,给个参考吧。。。
#7
这个我也是过,结果出现debug assertion failed调试了半天,也搞不定。。。
#8
。。。
谁来救救我啊!!怎么帖子沉了。。。
谁来救救我啊!!怎么帖子沉了。。。
#9
你的这个ItemName要重载=
因为CList要调用到,重载=的方法任何C++教材都有
因为CList要调用到,重载=的方法任何C++教材都有
#10
CFiles和ItemName都要重载operator=。
#11
没看到你所谓的ItemList,你只定义了一个FileList
我觉得你只贴错误号码是没有用的,要贴具体错误信息
我觉得你只贴错误号码是没有用的,要贴具体错误信息
#1
坚决杜绝0回复
#2
父类应该已经重载了,是不是少调用什么LIB文件了
#3
CString Item;
CList<CFiles,CFiles&> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因
CList<CFiles,CFiles&> FileList;
=======
你这两个成员变量前面没有加public,默认是private,可能是这个原因
#4
他的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;试试。
改为
CList<ItemName*,ItemName*> ItemLst;试试。
#6
这个 我大概了解了,也重载过operator =,但是出现另外一个debug错误,看了半天没找到错在哪。。。
帮个忙,给个参考吧。。。
#7
这个我也是过,结果出现debug assertion failed调试了半天,也搞不定。。。
#8
。。。
谁来救救我啊!!怎么帖子沉了。。。
谁来救救我啊!!怎么帖子沉了。。。
#9
你的这个ItemName要重载=
因为CList要调用到,重载=的方法任何C++教材都有
因为CList要调用到,重载=的方法任何C++教材都有
#10
CFiles和ItemName都要重载operator=。
#11
没看到你所谓的ItemList,你只定义了一个FileList
我觉得你只贴错误号码是没有用的,要贴具体错误信息
我觉得你只贴错误号码是没有用的,要贴具体错误信息