如何使用作为参数传递给函数的引用const对象

时间:2017-02-28 08:02:32

标签: c++ reference const

Pos是一个带有x和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;

1 个答案:

答案 0 :(得分:0)

好的,这就是我所做的 - 一条评论让我意识到你不能使用*运算符取消引用引用。你用指针而不是参考来做类似的事情。

我的struct Pos有一个构造函数,其形式为Pos(intx,int y,int time): 所以我只是使用语句

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

它有效。长话短说明你不能并且不能使用*

取消引用(不像指针)