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はクラスについて知っています。

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)

しかし、私はこのエラーを受け取ります:AStarPlanner ::〜AStarPlanner()
への未定義の参照'vtable for AStarPlanner'** ** undefined reference to

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)

これにより、robot_mover実行可能ファイルに対してすべての定義/実装を検索するソースファイルがリンカーに通知されます...

于 2016-02-14T06:28:22.787 に答える
1

このエラーは、コンパイラがのクラスの定義を検出できたが、リンカが検出できなかったことを意味します。yopuが実行可能ファイルをビルドしようとしたときに、生成されたものをリンカーに渡すように、コンパイルオプションを設定する必要があります。main()AStarPlanner.obj

セットアップ方法の正確な形式は、使用しているコンパイラによって異なります。

于 2012-05-22T16:12:28.727 に答える
1

それを使用gccして、次のようなものでコンパイルする必要があります。

gcc -o main Main.cpp AStarPlanner.cpp

私の推測では、あなたはそのAStarPlanner.cpp部分を見逃していると思います。

編集:

ヒュー?発生しているエラーは、OPで変更されたばかりです。この答えは今ではあまり意味がありません。

Edit2:

図書館に入れているようですAStarLibraryrobot_mover実行可能ファイルをビルドするときに、このライブラリにリンクしていますか?私はros*マクロに精通していませんが、通常のgccでは、ビルドコマンドは次のようになります。

gcc -o main Main.cpp -lrobot_mover
于 2012-05-22T16:18:31.297 に答える
0

AStarPlanner.cppはおそらくコンパイル/リンクされていません。プロジェクトに含まれていることを確認してください。

于 2012-05-22T16:13:02.377 に答える
-1

あなたの

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

コストマップを参照していますが、その定義が表示されません(クラスではなく変数自体の定義)。

于 2012-05-22T16:14:38.857 に答える