我有一个很大的问题,比我要发布的要大得多,但如果有人可以帮助我,那么它将从这里顺利航行。为什么我的向量不能识别我的派生类?
好的,我的指针向量拒绝承认它的派生类。让我解释。
我有一类战士和向导从中派生的Player对象。 该作业要求我将所述对象(战士和向导)存储到Player对象的指针向量中。 这是我到目前为止有:
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;
}
我重载战士和法师的接受通过CIN输入,而不是播放器(如分配说不)。 这里是战士一个样子(向导是相同的,但与精灵):
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行>> *玩家[1]):
错误C2679:二进制“>>”:没有找到运营商 这需要类型的右手操作数 “球员”(或没有 可接受的转化率)
现在怎么办我解决这个问题?我觉得它不会把它当作战士或者向导,它总是把它当作一名球员,但我不想那么做!
P.S.我知道这一切似乎都是多余的,远离优化,但这正是我的教授想要完成的。 :|
任何帮助将不胜感激,因为我一直坚持这个小时!谢谢谢谢谢谢!
-Jon
你确定你的教授不想让你做球员的抽象类和>>操作虚拟? – jabbie 2011-04-25 03:45:42
我的教授说我只能把操作员>>重载在Warrior和Wizard中。 这不是抽象的,我之所以这样说的唯一原因是因为我班的人不在抽象类是她将作为一项任务的地方。 – Apothem 2011-04-25 04:14:04