我这里有这个代码:
的 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知道该类。
CMakeList
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 to
AStarPlanner :: ~AStarPlanner()'
答案 0 :(得分:4)
答案 1 :(得分:2)
我也有一个未定义引用的问题,大部分时间表示链接问题...
我解决了这个问题:
与Lee Netherton所写的相似,但直接将其添加到您的CmakeLists.txt
确保添加失败函数的实现所在的文件。
在您的示例中,请确保:
myRouter='\x00\x13\xA2\x00\x40\xE4\x29\xB3'
#For Off
xbee.remote_at(dest_addr_long=myRouter,command='D0',parameter='\x04')
#For switch ON
xbee.remote_at(dest_addr_long=myRouter,command='D0',parameter='\x05')
这将告诉链接器哪些源文件针对您的robot_mover可执行文件查找所有定义/实现...
答案 2 :(得分:1)
错误意味着虽然编译器可以找到main()
类的定义,但链接器不能。您需要设置编译选项,以便yopu在尝试构建可执行文件时将生成的AStarPlanner.obj
传递给链接器
如何进行设置的确切形式取决于您使用的编译器。
答案 3 :(得分:1)
使用gcc
时,应使用以下内容进行编译:
gcc -o main Main.cpp AStarPlanner.cpp
我的猜测是你错过了AStarPlanner.cpp
部分。
修改强>
休?您刚刚在OP中更改了错误。这个答案现在没有多大意义。
<强> EDIT2:强>
看起来您正在将AStarLibrary
放入robot_mover
库中。在构建可执行文件时是否链接到此库?我不熟悉ros*
宏,但在普通的gcc中,build命令看起来像这样:
gcc -o main Main.cpp -lrobot_mover
答案 4 :(得分:0)
AStarPlanner.cpp可能没有被编译/链接。确保它在项目中。
答案 5 :(得分:-1)
您
AStarPlanner planner = AStarPlanner(10,10,&costmap);
引用costmap但我没有看到它的定义(对于变量本身,而不是对于类)。