Ошибка C ++: ожидаемое имя класса до токена '{' - PullRequest
0 голосов
/ 01 апреля 2020

снимок экрана Pose.hpp Я пытаюсь catkin_make создать простой пакет и получаю сообщение об ошибке

.../Pose.hpp:17:1: expected class-name before token...
.../Odometry.cpp:12:3: expected class-name before token...

Ответственный файл заголовка позы здесь представлен как:

#ifndef POSE_HPP
#define POSE_HPP
#include <string>
#include <vector>
#include <ostream>
#include "ros/serialization.h"
#include "ros/builtin_message_traits.h"
#include "ros/message_operations.h"
#include "ros/message.h"
#include "ros/time.h"


namespace turtle
{//line 17
template <class ContainerAllocator>
struct Pose_ : public ros::Message
{
  typedef Pose_<ContainerAllocator> Type;

}; // struct Pose
...
} // namespace turtle

в то время как на указанный заголовочный файл ссылаются в одометрии. cpp отображается как

#include <geometry_msgs/TwistWithCovarianceStamped.h>
#include <tf/transform_datatypes.h>
#include <robot_localization_demo/odometry.hpp>

namespace robot_localization_demo {

  TurtleOdometry::TurtleOdometry(ros::NodeHandle node_handle, double frequency):
    node_handle_{node_handle},
    turtle_pose_subscriber_{node_handle_.subscribe("turtle1/pose", 16, &TurtleOdometry::turtlePoseCallback, this)},
    turtle_twist_publisher_{node_handle_.advertise<geometry_msgs::TwistWithCovarianceStamped>("turtle1/sensors/twist", 16)},
    frequency_{frequency},
  {//line 12
    ;
  }

, и одометрия также включает в себя позу. что мне здесь не хватает?

1 Ответ

1 голос
/ 01 апреля 2020

Официальная документация для ros::Message гласит:

Этот базовый класс устарел в пользу системы сериализации и черт на основе шаблонов.

В официальном исходном коде похоже, что он все еще определен, но в найденной мной версии contrib все определение класса удаляется #if 0:

namespace ros {
#if 0
class Message {
    //
};
#endif
}

Итак, вам, скорее всего, нужно найти другой базовый класс.

...