我正在为我的c ++课程编写程序而且我遇到了问题。对于这个项目,我不得不组建两个超级团队并进行模拟战斗。在我的main.cpp中,我为每个团队创建了两个列表,并为它们填充了一个代表每个团队3个字符的3个类。在类中,我有属性,其中一个属性是'双倍速'。我对这两个团队进行了排序,使得每个团队的第一个角色拥有最快的速度,然后是最快的。现在是我坚持的部分。我现在必须进行模拟,并且最快的整体特征首先是下一个最快的。首先,我不知道如何将对方队伍添加到我班级的列表中,其次,我不知道如何比较列表以查看谁先走了。我在班上创建了一个名为
的列表list<super*>target
哪个是指针列表。当我创建团队时,我试图将相反的团队添加到我的目标列表中:
for(int i = 0; i < 3; i++) {
hptr = new super;
vptr = new super;
TeamA.push_back(*hptr);
TeamB.push_back(*vptr);
hptr -> addtarget(vptr);
vptr -> addtarget(hptr);
}
但是我的addtarget函数出错了:
void super::addtarget(super *tptr){
target.push_back(*tptr);
}
,错误信息为:
error: no matching function for call to 'std::list<super*>::push_back(super&)'
我已经坚持这个问题了几天,我似乎无法绕过它。我不想要如何做到这一点的确切代码,但只是一个先声,所以我可以尝试找出它。
答案 0 :(得分:1)
1.add super
到列表
TeamA.push_back(hptr);
TeamB.push_back(vptr);
我们可以从错误消息中看到target
列表存储指向super
对象的指针,因此您应该使用target.push_back(tptr)
而不是target.push_back(*tptr)
; tptr
指的是超级指针。 * tptr是super
对象。
2.比较stl::list
元素
您可以指定a custom sort predicate。
bool compareSuper(const super* a, const super* b) {
return (a->speed) > (b->speed);
}
TeamA.sort(compareSuper); // TeamA is in decreasing order after sort
TeamB.sort(compareSuper); // TeamB is in decreasing order after sort
答案 1 :(得分:0)
首先,对于列表比较,您可以使用所需的逻辑编写自己的函数。
其次,addtarget
函数有一点问题。您的target
变量的类型为“超级指针列表”,但在行target.push_back(*tptr)
中,您尝试将对象对象添加到列表而不是指向对象的指针。
第三,如果要合并两个列表,可以将list::merge
与您的类的比较函数一起使用。关于合并,您可以read here。