2

我在这里有这段代码:
Main.cpp

#include "AStarPlanner.h"
#include <costmap_2d/costmap_2d.h>

int main(int argc, char** argv)
{
   AStarPlanner planner =  AStarPlanner(10,10,&costmap);
}

和我的班级:
AStarPlanner.h

class AStarPlanner {

public:

  AStarPlanner(int width, int height, const costmap_2d::Costmap2D* costmap);
  virtual ~AStarPlanner();

AStarPlanner.cpp

#include "AStarPlanner.h"

using namespace std;

AStarPlanner::AStarPlanner(int width, int height, const costmap_2d::Costmap2D* costmap)
{

  ROS_INFO("Planner Konstruktor");
  width_ = width;
  height_ = height;
  costmap_ = costmap;
}

我看不出我有任何错误。该函数已定义,我的 main.cpp 知道该类。

制作清单

cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)

rosbuild_init()

#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

rosbuild_add_library (robot_mover src/AStarPlanner.cpp )
rosbuild_add_executable(robot_mover src/main.cpp)

但我收到此错误:
未定义对vtable for AStarPlanner'** ** undefined reference toAStarPlanner::~AStarPlanner()' 的引用

4

6 回答 6

4

您未能为 定义析构函数 AStarPlanner。您可以将其添加到 AStarPlanner.cpp 中:

AStarPlanner::~AStarPlanner()
{
}

考虑这个建议

于 2012-05-22T16:25:49.697 回答
2

我也遇到了未定义引用的问题,大多数时候这表明存在链接问题......

我解决了它:

与 Lee Netherton 写的类似,但直接将其添加到您的 CmakeLists.txt

确保添加失败的函数的实现所在的文件。

在您的示例中,请确保:

 add_executable(robot_mover 
                src/main.cpp
                AStarPlanner.cpp)

这将告诉链接器针对您的 robots_mover 可执行文件查找所有定义/实现的源文件...

于 2016-02-14T06:28:22.787 回答
1

gcc应该使用以下内容编译它:

gcc -o main Main.cpp AStarPlanner.cpp

我的猜测是你错过了这个AStarPlanner.cpp部分。

编辑:

休? 您刚刚在 OP 中更改的错误。这个答案现在没有多大意义。

编辑2:

看起来你正在AStarLibrary进入robot_mover图书馆。您在构建可执行文件时是否链接到该库?我对ros*宏不熟悉,但是在普通的 gcc 中,构建命令看起来像这样:

gcc -o main Main.cpp -lrobot_mover
于 2012-05-22T16:18:31.297 回答
1

该错误意味着虽然编译器可以找到类的定义main(),但链接器却找不到。您需要设置编译选项,以便 yopuAStarPlanner.obj在尝试构建可执行文件时将生成的内容传递给链接器

如何进行设置的确切形式取决于您使用的编译器。

于 2012-05-22T16:12:28.727 回答
0

AStarPlanner.cpp 可能没有被编译/链接。确保它在项目中。

于 2012-05-22T16:13:02.377 回答
-1

您的

AStarPlanner planner =  AStarPlanner(10,10,&costmap);

引用 costmap 但我没有看到它的定义(对于变量本身,而不是类)。

于 2012-05-22T16:14:38.857 回答