2017-02-18 43 views
0

我得到这个奇怪的错误线#407__getDataType错误

/home/data/rover_workspace/src/mobility/src/mobility.cpp:407:62: required from here 
    /opt/ros/indigo/include/ros/message_traits.h:143:36: error: request for member ‘__getDataType’ in ‘m’, which is of non-class type ‘const double’ 
     return m.__getDataType().c_str(); 

我是新来的ROS所以这个错误的确切含义,更重要的是如何解决它脱离了我。这里是第391 - 408行,其中错误发生在mobility.cpp中。

case STATE_MACHINE_ROTATE: { 
    stateMachineMsg.data = "ROTATING"; 
    // Calculate the diffrence between current and desired 
    // heading in radians. 
    float errorYaw = angles::shortest_angular_distance(currentLocation.theta, goalLocation.theta); 

    // If angle > 0.4 radians rotate but dont drive forward. 
    if (fabs(angles::shortest_angular_distance(currentLocation.theta, goalLocation.theta)) > rotateOnlyAngleTolerance) { 
     // rotate but dont drive 0.05 is to prevent turning in reverse 
     sendDriveCommand(0.05, errorYaw); 
     break; 
    } else { 
     // move to differential drive step 
     stateMachineState = STATE_MACHINE_SKID_STEER; 
     //fall through on purpose. 
    } //ERROR HERE 
} 

任何关于出错的解释都会很棒!

整个mobility.cpp文件被发现这里http://pastebin.com/8ZxuY5QQ

+1

我想你将需要发布更多的代码,包括你正在显示的各种东西的类型。不知道代码是怎么调用的,如果是391-408,并且错误是407,那么除了大括号之外,407上没有任何内容。所以,发布内容并不完全正确。 –

+0

好点,我现在将包含完整的代码。 –

+1

您是否因为出错而更改了代码? 407:62是linenumber:columnnumber,并且第407行仍然是括号,除了括号外没有代码,所以第62列没有任何意义。通常,从错误中看,你应该使用'Float64'数据类型而不是'double',无论错误是从哪里收集'double'。 –

回答

0

好了,所以你的问题是,你要发送一个thetaPublish :: std_msgs时Float64 THETA发布只能发布std_msgs ::浮点32。我会建议让发布者发布float64。

但是,您将会遇到问题,因为ROS:INDIGO已过期,发布商无法发送float64。你应该更新你的ROS版本。