我试图从一个抽象类继承,但得到以下错误:
在/ usr / include / c ++ / 5 / vector:64:0中包含的文件中, 来自/usr/include/boost/format.hpp:17, 来自/usr/include/boost/math/policies/error_handling.hpp:31, 来自/usr/include/boost/math/special_functions/round.hpp:14, 来自/opt/ros/kinetic/include/ros/time.h:58, 来自/opt/ros/kinetic/include/ros/ros.h:38, 来自/home/gil/catkin_ws/src/manager/include/Tasks/Task.h:4, 来自/home/gil/catkin_ws/src/manager/src/Tasks/Task.cpp:1: /usr/include/c++/5/bits/stl_vector.h:713:7:错误:无效的摘要 参数类型'manager :: Task' resize(size_type __new_size,value_type __x = value_type())
-
/home/gil/catkin_ws/src/manager/include/Tasks/Task.h:11:16:注意:
virtual void manager :: Task :: Execute()virtual void Execute()= 0; ^在/ usr / include / c ++ / 5 / vector:64:0中包含的文件中, 来自/usr/include/boost/format.hpp:17, 来自/usr/include/boost/math/policies/error_handling.hpp:31, 来自/usr/include/boost/math/special_functions/round.hpp:14, 来自/opt/ros/kinetic/include/ros/time.h:58, 来自/opt/ros/kinetic/include/ros/ros.h:38, 来自/home/gil/catkin_ws/src/manager/include/Tasks/Task.h:4, 来自/home/gil/catkin_ws/src/manager/include/Tasks/RootTask.h:10, 来自/home/gil/catkin_ws/src/manager/src/Tasks/RootTask.cpp:8: /usr/include/c++/5/bits/stl_vector.h:713:7:错误:无效的摘要 参数类型'manager :: Task' resize(size_type __new_size,value_type __x = value_type())
-
manager / CMakeFiles / manager.dir / build.make:110:目标配方 '管理器/ CMakeFiles / manager.dir / SRC /任务/ Task.cpp.o'失败了[2]: * [manager / CMakeFiles / manager.dir / src / Tasks / Task.cpp.o]错误1 make [2]:* 等待未完成的工作.... manager / CMakeFiles / manager.dir / build.make:158:目标的配方 '管理器/ CMakeFiles / manager.dir / SRC /任务/ RootTask.cpp.o'失败 make [2]:*** [manager / CMakeFiles / manager.dir / src / Tasks / RootTask.cpp.o] 错误1在/ usr / include / c ++ / 5 / vector:64:0中包含的文件中, 来自/usr/include/boost/format.hpp:17, 来自/usr/include/boost/math/policies/error_handling.hpp:31, 来自/usr/include/boost/math/special_functions/round.hpp:14, 来自/opt/ros/kinetic/include/ros/time.h:58, 来自/opt/ros/kinetic/include/ros/ros.h:38, 来自/home/gil/catkin_ws/src/manager/src/indoor_mission_action_server.cpp:9: /usr/include/c++/5/bits/stl_vector.h:713:7:错误:无效的摘要 参数类型'manager :: Task' resize(size_type __new_size,value_type __x = value_type())
不确定我错过了什么...... 这是我的H和CPP文件:
RootTask.cpp
#include "Tasks/RootTask.h"
namespace manager {
RootTask::RootTask(std::string name) {
mTaskName = name;
}
RootTask::~RootTask() {}
RootTask::RootTask() {}
void RootTask::Execute() {}
void RootTask::setTaskSeqByName() {}
std::string RootTask::GetTaskName() {
return mTaskName;
}
}
RootTask.h
#include "Tasks/Task.h"
namespace manager {
class RootTask: public Task {
public:
RootTask();
RootTask(std::string name);~RootTask();
void Execute();
void setTaskSeqByName();
std::string GetTaskName();
};
}
Task.cpp
#include "Tasks/Task.h"
#include < iostream >
namespace manager {
void Task::Stop() {}
void Task::Pause() {}
void Task::OnError() {}
std::string Task::GetTaskName() {}
void Task::setTaskSeqByName() {}
}
Task.h
#pragma once
#include < iostream >
#include "ros/ros.h"
namespace manager {
class Task {
public:
virtual void Execute() = 0;
virtual void setTaskSeqByName();
virtual void Stop();
virtual void Pause();
virtual void OnError();
virtual std::string GetTaskName();
protected:
std::string mTaskName;
std::vector < Task > mTaskSequence;
};
}
感谢您的帮助。
答案 0 :(得分:3)
在Task
您有会员
std::vector < Task > mTaskSequence;
你不能拥有它,因为Task
是一个抽象类,你不能创建它的实例。您需要使用类似
std::vector<std::unique_ptr<Task>> mTaskSequence;
答案 1 :(得分:1)
@NathanOliver的回答指出了如何修复编译器错误。
我想指出,让Task
包含指向其他Task
的指针列表似乎是一个可能的设计缺陷。
您可能需要考虑将其移至处理Task
s序列的更高级别的课程。