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;
答案 0 :(得分:0)
好的,这就是我所做的 - 一条评论让我意识到你不能使用*运算符取消引用引用。你用指针而不是参考来做类似的事情。
我的struct Pos有一个构造函数,其形式为Pos(intx,int y,int time): 所以我只是使用语句
使current_pose成为struct的对象bwi_gridworld::Pos current_pose((currentPos).x, (currentPos).y,0);
它有效。长话短说明你不能并且不能使用*
取消引用(不像指针)