方法链接导致编译错误

Method Chaining causes compilation errors

本文关键字:编译 错误 链接 方法      更新时间:2023-10-16

当我尝试用如下所示的方法链编写一行代码时,我得到了一个编译错误:

int index=data.getPlayer1().getIndex();

本例中的错误是

无效参数

但是当我分割链时,一切都很好:

Player player1=data.getPlayer1();
int index=player1.getIndex();

所有这些方法都是同一个命名空间的一部分,#include符号是有序的。如何解决这个问题?

编辑:

getter如下所示:

    const Player& getPlayer1() const {
    return player1;
}
int getIndex() { return index;}

getPlayer()返回const Player&,但getIndex()是一个非const成员函数,并且在const对象上调用非const成员函数是非法的。设置getIndex()const(因为它是getter,不修改对象):

int getIndex() const { return index; }
             //^^^^^

它在分割情况下工作:

Player player1=data.getPlayer1();

因为正在复制Player,并且player1不是const对象,可以调用getIndex()