【发布时间】:2020-10-16 07:14:05
【问题描述】:
注意:我已经在这里上传了我的代码:https://onlinegdb.com/r1P8APG0I 你可以运行它并重现错误。
我写了一个抽象的Character 类,它被Soldier 和Medic 等许多类继承。另外,我有一个Game 类,它有:
mtm::Dimensions dimensions;
std::vector<std::shared_ptr<Character>> board;
重要提示:我无法更改上面编写的代码,所以请考虑一下。
我需要为这个类写一个副本c'tor 在调用完成后,它会生成一个与前一个完全不相关的副本,所以我写道:
Game::Game(const Game &other):dimensions(other.dimensions){
int board_size = dimensions.getRow() * dimensions.getCol();
for (int i = 0; i < board_size; ++i) {
Character* copy = other.board[i]->clone();
board[i]=*copy;
}
}
但我收到一条错误消息:
错误:没有可行的重载 '=' board[i]=*copy;
这是什么意思,我该如何解决?
您可能需要在继承Character 的Medic 类上实现以下克隆
Character * Medic::clone() const {
return new Medic(*this);
}
更新:我尝试写 =copy 而不是 =*copy 但得到完全相同的错误。
【问题讨论】:
-
@FredLarson onlinegdb.com/r1P8APG0I
-
您应该尝试联系this user。他们似乎在做一个非常非常相似的项目,两个人总比一个人好。
标签: c++ class inheritance methods abstract-class