【问题标题】:Passing a const object in a function在函数中传递 const 对象
【发布时间】:2019-08-21 05:18:19
【问题描述】:

我试图将一个对象传递给一个函数,但将其声明为 const,因此它只能被读取而不能被更改。抛出一个需要表达式的错误,我不确定为什么或如何修复它。

我有一个父类和它的子类都具有相同的函数签名,但做不同的事情,他们都需要反对才能完成他们的任务。

我对 c++ 还是很陌生,浏览过这个网站上的其他问题,但没有找到任何答案;

谢谢。

 class Player{
   char getMove(const Board& board){

     char answer ='a';
     // ...
     return answer;
   }
 };
 class Computer : public Player  {
   char getMove (const Board& board){
      char answer = 'a';
      // ...
      return answer;
   }
 };

函数调用

 int main(){ 

    Player* player[2];
    player[0] = new Player;
    player[1] = new Computer;
    char p0Move, p1Move

    p0Move = player[0]->getMove(const board); 
    p1Move = player[1]->getMove(const board);

 }

错误: 在 player[0]->getMove 和 player[1]->getMove

处的“表达式预期”

【问题讨论】:

  • 这个错误在哪一行;它指向什么?您能否制作一个简化的代码版本,以便向我们展示整个内容?
  • 对不起,你遗漏了太多。请阅读如何创建minimal reproducible example。它应该是我们可以修改而无需填写任何空白的东西。
  • 虽然...我敢打赌const board 是问题所在。应该是board。
  • 同样,不相关,但您可能应该遵循标准命名约定并将类型大写(例如,将 player 重命名为 Player)
  • 请包含完整的错误消息并提供minimal reproducible example,尤其是未声明board,并且您在此处发布的main 会产生您在问题中提到的错误以外的其他错误(缺少; 和 Board 未定义)。其他人可以猜测,但不提供真实代码会导致难以回答,并将此问题对未来读者有用的可能性降低到接近于零

标签: c++ function object constants


【解决方案1】:

这些是问题所在:

p0Move = player[0]->getMove(const board);
p1Move = player[1]->getMove(const board);

这里不需要'const'。你想要的是:

p0Move = player[0]->getMove(board);
p1Move = player[1]->getMove(board);

【讨论】:

  • “对'const Board'类型的引用无法绑定到'Board *'类型的左值”它抛出上面的错误,它与动态声明的board对象有关吗?
  • 这是类型不匹配;您正在尝试将 Board * 类型的对象(即指向 Board 的指针)传递给需要 const Board& 的对象,即对 Board 的引用或对 const Board 的引用。您需要取消引用指针以获取实际对象。
  • 板在哪里定义,我在问题中没有看到它
  • 没有动态声明这样的东西。可以动态分配对象。我不是想成为一个书呆子,只是为了理解 C++,你必须弄清楚基本概念。
  • 我猜通过动态声明你需要声明为指针。如果是这样,那么是的,这就是问题所在,简单的答案是player[0]->getMove(*board);,使用* 取消引用指针以获取对象。
【解决方案2】:

我在 Visual Studio 2017 中执行了您的代码:

1) 添加公共说明符

class Player {
public:
    char getMove(const Board& board) {

        char answer = 'a';
        // ...
        return answer;
    }
};

class Computer : public Player {
public:
    char getMove(const Board& board) {
        char answer = 'a';
        // ...
        return answer;
    }
};
  1. 移除常量

    p0Move = player[0]->getMove(board);

    p1Move = 玩家[1]->getMove(棋盘);

【讨论】:

  • 然后...?这仍然没有定义板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2019-07-02
  • 2012-10-20
  • 1970-01-01
  • 2013-11-24
  • 2020-05-24
  • 1970-01-01
相关资源
最近更新 更多