【发布时间】:2021-11-05 06:22:29
【问题描述】:
我有以下类结构,但是当我构建时,我不断收到错误:
error: no viable overloaded '='
p1 = new HumanPlayer();
~~ ^ ~~~~~~~~~~~~~~~~~
../Test.cpp:14:7: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'HumanPlayer *' to 'const Player' for 1st argument; dereference the argument with *
class Player {
^
1 error generated.
class Player {
public:
void getMove(int player) {
cout << "Get move" << endl;
}
};
class HumanPlayer: public Player {
public:
void getMove(int player) {
cout << "Get Human move \n";
}
};
class MyClass {
public:
int mode;
Player p1;
MyClass() {
mode = 0;
cout << "Choose a mode: \n";
cin >> mode;
switch (mode) {
case 1:
p1 = new HumanPlayer();
break;
default:
break;
}
p1.getMove(0);
}
};
int main() {
MyClass c;
return 0;
}
我尝试将Player p1; 更改为Player* p1; 并将p1.getMove 更改为p1->getMove,但它无法正常工作。它打印了Get move 而不是Get Human move。
【问题讨论】:
-
new返回一个指针。在第二种情况下,getMove 没有标记为virtual,因此它不是多态的。 -
构造函数应该对对象进行简单和基本的初始化。它不应该做一些高级的事情,比如终端输入和输出。最好把它留给其他功能。
-
我怀疑您一直在使用其他一些语言进行编程,其中
new是您创建对象的方式。 C++ 不是那些语言。获取good book 并阅读有关多态性的信息。 -
是的,我一直在使用 Java,并且对 C++ 很陌生(因此使用了
new)
标签: c++ eclipse inheritance reference