【问题标题】:no viable overloaded '=' error, what may cause this?没有可行的重载'='错误,这可能是什么原因?
【发布时间】:2020-10-16 07:14:05
【问题描述】:

注意:我已经在这里上传了我的代码:https://onlinegdb.com/r1P8APG0I 你可以运行它并重现错误。

我写了一个抽象的Character 类,它被SoldierMedic 等许多类继承。另外,我有一个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;

这是什么意思,我该如何解决?

您可能需要在继承CharacterMedic 类上实现以下克隆

Character * Medic::clone() const {
    return new Medic(*this);
}

更新:我尝试写 =copy 而不是 =*copy 但得到完全相同的错误

【问题讨论】:

标签: c++ class inheritance methods abstract-class


【解决方案1】:

你在这里取消引用一个指针

board[i]=*copy;

如果您尝试构建std::shared_ptr,则使用原始指针创建一个

board[i] = std::shared_ptr<Character>(copy);

更简洁的就是

board[i] = std::shared_ptr<Character>(other.board[i]->clone());

【讨论】:

  • @FredLarson 我的代码现在可以运行了,谢谢!请将此作为答案发布,并提供更多信息
  • @FredLarson 很好,感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 2021-06-09
  • 2011-11-18
  • 2014-10-08
  • 2022-07-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多