C++ 在函数中传递常量对象

C++ 在函数中传递常量对象,c++,function,object,constants,C++,Function,Object,Constants,我试图将一个对象传递到一个函数中,但将其声明为const,这样它只能被读取而不能被更改。抛出一个错误,表示需要一个表达式,我不确定为什么或如何修复它 我有一个父类及其子类,它们都具有相同的函数签名,但做的事情不同,它们都需要对象来完成任务 我对C++仍然很新,在这个网站上浏览过其他问题,但没有找到答案。p> 谢谢 class Player{ char getMove(const Board& board){ char answer ='a'; // ...

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

我有一个父类及其子类,它们都具有相同的函数签名,但做的事情不同,它们都需要对象来完成任务

我对C++仍然很新,在这个网站上浏览过其他问题,但没有找到答案。p> 谢谢

 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处需要表达式这些行是问题:

p0Move = player[0]->getMove(const board);
p1Move = player[1]->getMove(const board);
这里不需要“const”。你想要的是:

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

我在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;
    }
};
删除常数

p0Move=播放器[0]->getMove板

p1Move=播放器[1]->getMove板


这个错误在哪一行;它指的是什么?你能把你的代码简化成一个简单的版本,让我们看看整个过程吗?对不起,你省略了太多。请仔细阅读如何创造一个新的世界。它应该是我们可以修补的东西,而不需要填补任何空白。尽管。。。我敢打赌警察局就是问题所在。它可能是棋盘。此外,不相关,但您可能应该遵循标准命名约定,并大写类型,例如,将玩家重命名为玩家请包含完整的错误消息并提供一个,特别是棋盘未声明,并且您在此处发布的main将产生除您在问题中提到的错误以外的其他错误;和董事会未定义。其他人可以猜测,但不提供真正的代码会使回答变得困难,并降低这个问题对未来读者有用的可能性,因为接近零引用类型“const Board”无法绑定到类型“Board*”的左值,它抛出了上面的错误,它是否与动态声明的board对象有关?这是类型不匹配;您正在尝试传递Board*类型的对象,即指向需要const Board的某个对象的Board指针,即对Board的引用或对const Board的引用。你需要取消对指针的引用以获得实际的对象。board定义在哪里,我在问题中没有看到它,没有动态声明的东西。对象可以动态分配。我并不是想成为一个迂腐者,只是为了理解C++,你必须把基本概念弄清楚。我想通过动态声明你需要声明为指针。如果是这样,那么是的,这就是问题所在,简单的答案是player[0]->getMove*board;,使用*取消对指针的引用以获取对象。和?这仍然没有定义board。