我有以下的類結構,但當我構建時,我一直得到錯誤:
我有以下的類結構。
error: no viable overloaded '='/span>
p1 = new HumanPlayer()。
~~ ^ ~~~~~~~~~~~~~~~~~
.../Test. cpp:14:7: note: 候選函式 (隱式復制賦值操作器) 不可行。沒有已知的從'HumanPlayer *'到'const Player'的轉換,對于1個引數;用*解除引數的參考。
class Player {
^
1錯誤產生。
class Player {
public:
void getMove(int player){
cout << "get move" << endl;
}
};
class HumanPlayer: public Player {
public:
void getMove(int player) {
cout << "獲取人類動作
"。
}
};
class MyClass{
public:
int模式。
播放器p1。
MyClass() {
mode = 0;
cout << "選擇一個模式。
"。
cin >> 模式。
開關(模式) {
case 1:
p1 = new HumanPlayer()。
break;
default:
break;
}
p1.getMove(0)。
}
};
int main() {
我的班級c。
return 0;
}
我試著把Player p1;改為Player* p1;,并把p1.getMove改為p1->getMove,但后來沒有正確作業。它列印了Get move,而不是Get Human move.
uj5u.com熱心網友回復:
如上所述
p1 = new HumanPlayer() 。
如果p1被宣告為指標,則有效,與java不同,你可以在c 中使用或不使用new關鍵字進行賦值...
在你的例子中,將p1宣告為指標就可以了
。Player* p1{nullptr}。
以及后來的
p1 = new HumanPlayer() 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/308367.html
標籤:
