Проблема компиляции C++, неверный аргумент шаблона 2

У меня довольно большая кодовая база. Это все здесь https://github.com/mpkuse/nap/tree/master-desktop/src

Это на самом деле пакет ros, который должен быть скомпилирован с catkin_makeкоторый является слоем над cmake.

Моя кодовая база прекрасно компилируется на моем Ubuntu-десктопе (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(); 

Также добавлен Suse.cpp в список компиляции cmake и включен Suse.h в DataManager.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

0 ответов

Другие вопросы по тегам