2016-10-10 3 views
0

Я получаю сообщение об ошибке «» в моем проекте. Я попытался создать MWE, как показано ниже, и считаю, что ошибка будет очевидна из этого. Я предполагал, что мне нужно было поставить Mapmatcher:: перед функцией, но, как я объявил в class Mapmatcher{}, это не обязательно.undefined ссылка на ошибку привязки

map_matcher_test_lib.h:

class Mapmatcher{ 
    public: 
     Mapmatcher(void){}; 
     void ransacMatches(cv::Mat matGlob, cv::Mat matLoc, Pose &pose); 
}; 

map_matcher_test_lib.cpp:

#include "map_matcher_test/map_matcher_test_lib.h" 
namespace map_matcher_test 
{ 
//classes 
    class Mapmatcher{ 
     void ransacMatches(cv::Mat matGlob, cv::Mat matLoc, Pose &pose) 
      { 
       // some code here... 
      } 
    }; 
} 

map_matcher_test_node.cpp:

#include "map_matcher_test/map_matcher_test_lib.h" 
Mapmatcher *mama = new Mapmatcher(); 
void mapMatcher() 
{ 
    // matGlob, matLoc, result known here 
    mama->ransacMatches(matGlob, matLoc, result); 
} 
int main (int argc, char** argv) 
{ 
    // some stuff... 
    mapMatcher(); 
} 

Любая помощь приветствуется.

ответ

2

У вас есть class Mapmatcher один раз в вашем файле заголовка, а затем еще раз в исходном файле, это ошибка и нарушает правило определения Once. Вы должны иметь только определение класса в файле заголовка и реализовать методы в исходном файле (ы):

map_matcher_test_lib.h:

class Mapmatcher{ 
    public: 
     Mapmatcher(void){}; 
     void ransacMatches(cv::Mat matGlob, cv::Mat matLoc, Pose &pose); 
}; 

map_matcher_test_lib.cpp:

#include "map_matcher_test/map_matcher_test_lib.h" 
namespace map_matcher_test 
{ 
    void Mapmatcher::ransacMatches(cv::Mat matGlob, cv::Mat matLoc, Pose &pose) 
    { 
     // some code here... 
    } 
} 

Убедитесь, что ваше определение класса Mapmatcher находится внутри пространства имен в вашем заголовке.