我有一個很大的問題,比我要發佈的要大得多,但如果有人可以幫助我,那麼它將從這裏順利航行。爲什麼我的向量不能識別我的派生類?
好的,我的指針向量拒絕承認它的派生類。讓我解釋。
我有一類戰士和嚮導從中派生的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