【发布时间】:2018-10-11 01:54:23
【问题描述】:
我有一个有趣的任务,我有一个 std::map 的 CTurist(上一课)和 unsigned 变量。代码如下:
class CTurist
{
protected:
string tName;
int age;
public:
CTurist() {};
CTurist(string name, int age2)
{
tName = name;
age = age2;
}
bool operator<(const CTurist& e) const
{
return age < e.age;
}
friend ostream& operator<<(ostream& os, const CTurist&& e);
friend ifstream& operator>>(ifstream& is, CTurist&& e);
};
class CHotel:public CTurist
{
protected:
string hName;
int stars;
int beds;
map<CTurist, unsigned> Turisti;
public:
unsigned Sum = 0;
CHotel(){};
CHotel(string hName2, int zvezdi, int legla)
{
hName = hName;
stars = zvezdi;
beds = legla;
}
int Compare()
{
list<CTurist*> list;
int br=0;
CTurist vyzrast;
map<CTurist, unsigned>::iterator it = Turisti.begin();
while (it != Turisti.end())
{
if (it->first < vyzrast)
{
br++;
}
else
{
list.push_back(std::move(&it->first));
}
}
}
};
我知道这很长,但我认为最好把所有信息都告诉你。
现在,底部的int Compare() 函数是给我带来问题的函数。
我必须检查游客的年龄是否高于或低于我在这里称为vyzrast 的参数。我们正在比较age。如果它在下面,那就很简单了。
如果它在上面,我必须将这些游客添加到list<CTurist*>,又名。指向指针列表。如果我从对象而不是指针创建列表。运气不好,因此我在这里寻找如何解决它的建议。
【问题讨论】:
-
“我知道它很长,但我认为最好给你所有的信息”——你说得对,这确实是不必要的长。请创建一个更短的示例(只是重现问题的最低限度)。这样做的时候你可能会发现你需要做什么;-)
-
@YePhIcK:缩短。
-
不清楚您为什么要从
CTourist导出CHotel,而您的酒店中存储有游客列表?至于关于指针的具体问题:指针必须 point 指向某物(在您的情况下为对象)。你不能只拥有没有它们指向的对象的指针。 -
list应该包含什么?指向年龄小于vyzrast的CTursits 的指针? -
@YePhIcK 这与以前不同。感谢您的关注。根据你所说的,我做了这个: CTurist* baba = new CTurist(it->first); list.push_back(std::move(baba));