2016-10-10 2 views
0

私のプロジェクトでは "undefined reference to Mapmatcher::ransacMatches(cv::Mat, cv::Mat, Pose&)"リンクエラーが発生します。以下に示すようにMWEを作成しようとしましたが、そのエラーは明らかです。私の推測では、関数の前にMapmatcher::を置く必要がありましたが、私はclass Mapmatcher{}で宣言しているので、それは必要ではありません。リンクエラーへの未定義参照

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を1回、ソースファイルにもう一度入力すると、エラーとなり、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であることがヘッダー内の名前空間内にあることを確認してください。

関連する問題