如何使用参考const对象传递到函数作为参数

How to use reference const object passed to a function as a parameter

本文关键字:函数 参数 何使用 参考 const 对象      更新时间:2023-10-16

pos是x and y&我想访问CurrentPOS的这些组合。但是我得到了错误。我无法直接访问CurrentPos.x和.y作为编译器无法处理它,因为尚未完成分配。因此,我选择了一个全局变量。但是那也不起作用。 错误在代码段的底部

 bwi_gridworld::Pos current_pose; //global variable
 void setCurrentPose(const bwi_gridworld::Pos& currentPos) {
        current_pose = *currentPos;
}

  char myAgent::nextAction(const bwi_gridworld::Pos& currentPos) {
    //Grid grid;
    int ht =  10;
    int width = 10;;
    setCurrentPose(currentPos);
    switch(id){
        case 0: {
                    if(current_pose.x - 0 < 5)
                        return 'e';
                    else if(current_pose.y - ht  < 5)
                        return 's';
                    else if(fabs(current_pose.x - (width/2)) < 5) 
                        return 'w';
                    else if(fabs(current_pose.y - (ht/2)) < 5)
                        return  'n';
                    else {
                        return defaultGetMove();
                        }

            }break;
        case 1:{
                if(fabs(current_pose.y - ht) < 5)
                    return 'e';
                else if(fabs(current_pose.x -x) < 5) 
                    return 'w';
                else if(fabs(current_pose.x - x/2) < 5)
                    return 's';
                else if(fabs(current_pose.y - ht/2) < 5)
                    return 'n';
                else return defaultGetMove();
            }break;
        case 2:{
                if(current_pose.x - 0 < 5)
                        return 'e';
                else if(fabs(current_pose.x - ht/2) < 5) 
                        return 'w';
                else if( fabs(current_pose.y - 0) < 5) 
                    return 'n';
                else if( fabs(current_pose.y - (width/2)) < 5)
                    return 's';
                else
                    return defaultGetMove();
            }break;
        case 3:{
                if(fabs(current_pose.x - width) < 5) 
                    return 'w';
                else if(fabs(current_pose.x - (width/2)) < 5)
                    return 'e';
                else if(fabs(current_pose.y - ht/2) < 5)
                    return 's';
                else if(fabs(current_pose.y - 0) < 5)
                    return 'n';
                else
                    return defaultGetMove();
            }
        }
}


   /home/bonny/bwi_gridworld/agent/src/myAgent.cpp:7:20: error: aggregate ‘bwi_gridworld::Pos current_pose’ has incomplete type and cannot be defined
     bwi_gridworld::Pos current_pose;
                        ^
    /home/bonny/bwi_gridworld/agent/src/myAgent.cpp: In function ‘void setCurrentPose(const bwi_gridworld::Pos&)’:
    /home/bonny/bwi_gridworld/agent/src/myAgent.cpp:23:19: error: no match for ‘operator*’ (operand type is ‘const bwi_gridworld::Pos’)
        current_pose = *currentPos;

好吧,这就是我所做的 - 一条评论使我意识到您不能使用 *操作员使用参考。您会用指针而不是参考来做类似的事情。

我的struct pos具有一个形式的构造函数(intx,int y,int time):因此,我只是使用语句

使Current_pose成为结构的对象
bwi_gridworld::Pos current_pose((currentPos).x, (currentPos).y,0); 

它起作用。长话短说,您没有,无法使用 *

取消参考(与指针不同)