簡體   English   中英

C ++純虛擬錯誤

[英]C++ pure virtual error

我正在嘗試從抽象類繼承,但出現以下錯誤:

在/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:注意:
虛擬虛空管理器:: Task :: Execute()虛擬虛空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: :任務的大小調整(size_type __new_size,value_type __x = value_type())

-

manager / CMakeFiles / manager.dir / build.make:110:目標'manager / CMakeFiles / manager.dir / src / Tasks / Task.cpp.o'的配方制作失敗[2]: * [manager / CMakeFiles / manager。 dir / src / Tasks / Task.cpp.o]錯誤1 make [2]:*等待未完成的作業。...manager / CMakeFiles / manager.dir / build.make:158:目標'manager / CMakeFiles / manager.dir / src / Tasks / RootTask.cpp.o'失敗[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'調整大小(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;
  };
}

感謝您的幫助。

Task您有一個成員

std::vector < Task > mTaskSequence;

您不能擁有該類,因為Task是一個抽象類,您不能創建它的實例。 您需要使用類似的指針類型

std::vector<std::unique_ptr<Task>> mTaskSequence;

@NathanOliver的答案指出了如何解決編譯器錯誤。

我想指出,讓Task包含指向其他Task的指針的列表似乎是可能的設計缺陷。

您可能需要考慮將其上移至處理Task序列的更高級別的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM