gpt4 book ai didi

c++ - 为什么我的 vector 不能识别我的派生类?

转载 作者:行者123 更新时间:2023-11-28 08:21:14 24 4
gpt4 key购买 nike

我有一个大问题,比我要发布的问题大得多,但如果有人可以帮助我解决这个问题,那么从这里开始就会一帆风顺。

好的,所以我的指针 vector 拒绝识别它的派生类。让我解释一下。

我有一类 Player 对象,Warrior 和 Wizard 从中派生。作业要求我将所述对象(Warrior 和 Wizard)存储到 Player 对象的指针 vector 中。这是我目前所拥有的:

vector<Player *> players; 
cout << "Please enter the number of players" << endl;
cin >> numOfPlayers;
total = amountPlaying(numOfPlayers);
for(int i = 0; i < total; i++)
{
temp = members();
if (temp == "Warrior" || temp == "warrior")
players[i] = new Warrior();
if (temp == "Wizard" || temp == "wizard")
players[i] = new Wizard();
else
{
cout << " wrong input, try again " <<endl;
i--;
}
cin >> *players[i];
}

成员函数:

string members()
{
string response;
cout << "Please select a Warrior or Wizard" << endl;
cin >> response;
return response;
}

我已经重载了 Warrior 和 Wizard 以通过 cin 接受输入,但不是 Player(正如任务中所说的那样)。这是战士的样子(巫师是一样的,但有巫师):

istream& operator>>(istream& in, Warrior& warrior)
{
int base_strength, base_weapon_level, base_weapon_type;

cout << "Please enter his/her weapon of choice (1 = sword, 2 = axe, 3 = bow, 4 = knife)" << endl;
in >> base_weapon_type;
cout << "Please enter his/her weapon level" << endl;
in >> base_weapon_level;
cout << "Please enter strength" << endl;
in >> base_strength;

warrior.set_power(base_strength);
warrior.set_weapon_level(base_weapon_level);
warrior.set_weapon_type(base_weapon_type);
return in;
}

现在的问题是,我得到了这个错误(在 cin >>*players[i] 的那一行):

error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'Player ' (or there is no acceptable conversion)

现在我该如何解决这个问题?我觉得它不会把它当作战士或法师,它总是把它当作玩家,但我不想要那样!

附言我知道这一切似乎都是多余的,而且离优化还很远,但这正是我的教授希望它完成的方式。 :|

任何帮助将不胜感激,因为我已经在这上面停留了几个小时!谢谢谢谢谢谢!

-乔恩

最佳答案

您收到此错误是因为当您在此处取消引用指向 Player 的指针时,您得到的是 Player 对象,而不是 Warrior 或 Wizard:

cin >> *players[i]

而且 Player 对象没有您所说的 operator>>()

可能的解决方案:
1. 使用dynamic_cast 在运行时从Player* 转换为Wizard*Warrior*。您可以尝试,但还有更方便的方法。示例代码:

Wizard *  pwizard = dynamic_cast <Wizard*>(players[i]);
if (pwizard) {
// work with pwizard
}
else {
Warrior * pwarrior = dynamic_cast <Warrior*>(players[i]);
if (pwarrior) {
// work with pwarrior
}
}

关于c++ - 为什么我的 vector 不能识别我的派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com