【发布时间】:2011-04-25 03:39:28
【问题描述】:
我有一个很大的问题,比我要发布的要大得多,但是如果有人可以帮助我解决这个问题,那么从这里开始就会一帆风顺。
好的,所以我的指针向量拒绝识别它的派生类。让我解释一下。
我有一类 Player 对象,Warrior 和 Wizard 都从这些对象派生而来。 作业要求我将所述对象(战士和巫师)存储到 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;
}
我重载了 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] 一致):
错误 C2679:二进制“>>”:无运算符 发现它需要一个右手操作数 'Player' 类型的(或者没有 可接受的转换)
现在我该如何解决这个问题?我觉得它不会把它当作战士或巫师,它总是把它当作玩家,但我不想那样!
附:我知道这一切似乎都是多余的,并且与优化相差甚远,但这正是我的教授希望它完成的方式。 :|
任何帮助都将不胜感激,因为我已经为此困扰了几个小时!谢谢谢谢谢谢!
-乔恩
【问题讨论】:
-
您确定您的教授不想让您将 Player 设为抽象类而将 >> 运算符设为虚拟吗?
-
我的教授说我只能把operator>>重载在Warrior and Wizard中。这不是抽象的,我这么说的唯一原因是因为我班上的人还没有达到抽象类作为作业的水平。
标签: c++ pointers vector operator-overloading polymorphism