我在从 STL 集继承时遇到问题(我认为):
这是 Prime 类:
class Prime : public set<A> {
private:
// private data members.
public:
// C'tor...
void printParticularA(const int& id);
}
这是A类:
class A : public List<B>{
private:
// data members.
int id;
public:
// C'tor
A(const A& copy) : List<B>(copy), //copy data members
{ // validate data and throw exceptions if needed. };
bool operator< (const A& rhs) const{
return id < rhs.id;
}
void printReport() const {
for(const B& item : *this){ item.print(); }
}
}
现在这是问题所在。在下一个函数中,我想打印集合中的特定 A 对象:
void Prime::printParticularA(const int& id) {
find(AFinder(id))->printReport();
}
我也试过这个:
void Prime::printParticularA(const int& id) {
*(find(AFinder(id))).printReport();
}
注意:假设 B 类有 print() 方法。
注意 2:AFinder 是一个仅使用 id 数据制作虚拟 A 对象的类。
问题是当'find'找到它返回const_iterator的对象时(因为set中的每个对象都是const),当我取消引用它时,我得到一个对象的副本(??)但里面的B列表是空的!
'->' 版本也会发生这种情况。
现在我知道 set 不允许我更改对象,但我不打算更改对象(如您在 printReport 成员函数的声明中所见)。
我很感激这方面的任何帮助!
编辑:谢谢大家,你们帮了我很多,尤其是学习不该做什么。
我解决了这个问题,它不在集合、列表中,也没有我在这里展示的任何课程。
我的错误在于理解我被提出的问题(是的,这是我的家庭作业,我还是 C++ 新手)。
对不起,如果你觉得我浪费了你的时间。
我希望我可以从您的所有经验中学习,并有朝一日帮助他人!
简而言之,谢谢!:)