私はかなり大きなコードベースを持っています。それはすべてここにあります https://github.com/mpkuse/nap/tree/master-desktop/src
実際にcatkin_make
は、cmake 上のレイヤーでコンパイルする必要がある ros パッケージです。
私のコードベースは、ubuntu-desktop (gcc バージョン 5.4.0) で正常にコンパイルされます。ただし、Nvidia-TX2 に移行すると、非常に長いエラー リストが表示されます。以下のようにそのスニペット。クラス Node は Node.h で定義され、他のクラスに含まれています。
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:73:68: error: template argument 2 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:73:68: error: template argument 1 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:73:68: error: template argument 2 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:73:56: error: invalid use of template-name ‘std::vector’ without an argument list
LocalBundle( const nap::NapMsg::ConstPtr& msg, const vector<Node*>& global_nodes, const PinholeCamera& camera );
^
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:73:62: error: expected ‘,’ or ‘...’ before ‘<’ token
LocalBundle( const nap::NapMsg::ConstPtr& msg, const vector<Node*>& global_nodes, const PinholeCamera& camera );
^
In file included from /home/nvidia/catkin_ws/src/nap/src/DataManager.h:82:0,
from /home/nvidia/catkin_ws/src/nap/src/DataManager_rviz_visualization.cpp:1:
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:127:45: error: template argument 1 is invalid
int find_indexof_node( const vector<Node*>& global_nodes, ros::Time stamp );
^
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:127:45: error: template argument 2 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:127:45: error: template argument 1 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:127:45: error: template argument 2 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:127:45: error: template argument 1 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:127:45: error: template argument 2 is invalid
/home/nvidia/catkin_ws/src/nap/src/LocalBundle.h:127:45: error: template argument 1 is invalid
ここで何が起こっているのですか?助言がありますか?
問題を切り分けようとしました。これが私がしたことです。クラスLocalBundle
とを完全に削除しましたCorvus
。それらは DataManager_core.cpp/place_recog_callback() で使用されていました。対応する cmake エントリも削除されました。これで、コードをコンパイルできます。
ダミークラスを追加してみたSuse
// Suse.h
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
using namespace std;
class Suse
{
public:
Suse();
void sayHi();
};
;
// Suse.cpp
#include "Suse.h"
Suse::Suse()
{
}
void Suse::sayHi()
{
cout << "Hi from Suse\n";
}
次に、このクラスをまったく同じ場所 (つまり、place_recog_callback()) で次のように使用しようとしました。
Suse sy = Suse();
sy.sayHi();
また、cmake コンパイル リストに Suse.cpp を追加し、DataManager.h に Suse.h を含めました。
これで、正常にコンパイルされます。
ただし、opencv を Suse.h に含めると、次のようになります。
// //opencv
#include <opencv2/core/core.hpp>
using namespace cv;
長いエラー メッセージが表示されます。最初の数行は元のエラーに似ています。
[ 81%] Building CXX object nap/CMakeFiles/pose_graph_opt_node.dir/src/DataManager_core.cpp.o
[ 83%] Building CXX object nap/CMakeFiles/pose_graph_opt_node.dir/src/DataManager_rviz_visualization.cpp.o
[ 85%] Building CXX object nap/CMakeFiles/pose_graph_opt_node.dir/src/pose_graph_opt_node.cpp.o
[ 87%] Building CXX object nap/CMakeFiles/pose_graph_opt_node.dir/src/DataManager_utils.cpp.o
[ 88%] Building CXX object nap/CMakeFiles/pose_graph_opt_node.dir/src/Suse.cpp.o
In file included from /home/nvidia/catkin_ws/src/nap/src/DataManager_core.cpp:1:0:
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:171:21: error: template argument 1 is invalid
const vector<Node*>& getNodesRef() { return nNodes; }
^
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:171:21: error: template argument 2 is invalid
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:185:15: error: template argument 1 is invalid
vector<Node*> nNodes; //list of notes
^
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:185:15: error: template argument 2 is invalid
In file included from /home/nvidia/catkin_ws/src/nap/src/DataManager_rviz_visualization.cpp:1:0:
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:171:21: error: template argument 1 is invalid
const vector<Node*>& getNodesRef() { return nNodes; }
^
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:171:21: error: template argument 2 is invalid
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:185:15: error: template argument 1 is invalid
vector<Node*> nNodes; //list of notes
^
/home/nvidia/catkin_ws/src/nap/src/DataManager.h:185:15: error: template argument 2 is invalid