У меня есть 2 класса Node и LifeNode. Node -- шаблон класса.
Вот их объявление:
node.h#ifndef NODE_H
#define NODE_H
#include <ros/ros.h>
#include <ros_johnny5/servoMsgArray.h>
#include <ros_johnny5/servoMsg.h>
#include <ros_johnny5/robotState.h>
template <typename PublisherMsgType, typename SubscriberMsgType>
class Node
{
private:
ros::Publisher mPublisher;
ros::Subscriber mSubscriber;
public:
Node(int sizeMessageBuffer,
char* publisherTopicName,
char* subscriberTopicName);
void publish(PublisherMsgType &msg);
int getNumSubscribers();
protected:
virtual void pCallbackFunc(const SubscriberMsgType &msg);
ros::NodeHandle pNodeHandler;
};
#endif // NODE_H
life_node.h#ifndef JOHNNY_LIFE_H
#define JOHNNY_LIFE_H
#include <ros/ros.h>
#include <ros_johnny5/servoMsgArray.h>
#include <ros_johnny5/servoMsg.h>
#include <ros_johnny5/robotState.h>
#include <node.h>
#include <topics.h>
#include <positions.h>
class LifeNode : public Node<ros_johnny5::servoMsgArray, ros_johnny5::robotState>
{
private:
u_int8_t mInMotion;
u_int8_t mGreetingFlag;
ros::Timer greetingTimer;
public:
LifeNode();
void greetingTimerCallback(const ros::TimerEvent& e);
void callbackFunc(const ros_johnny5::robotState &msg);
void publish(ros_johnny5::servoMsgArray &msg);
void timerInit();
u_int8_t getMotion();
};
#endif // JOHNNY_LIFE_H
Вопрос в следующем: как правильно написать реализацию конструктора наследника?
Вот так сделал я:
#include life_node.h
LifeNode::LifeNode():
Node(SIZE_MESSAGE_BUFFER, TOPIC_SERVO_CONTROL, TOPIC_ROBOT_STATE),
mInMotion(1),
mGreetingFlag(0)
{
}
Но получаю ошибку:
/home/dim/Dev/catkin_ws/src/ros_johnny5/src/johnny_life.cpp:12: ошибка: undefined reference to `Node<ros_johnny5::servoMsgArray_<std::allocator<void> >, ros_johnny5::robotState_<std::allocator<void> > >::Node(int, char*, char*)'
Как быть?