This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(32个答案)
3年前关闭。
我在项目中收到“
map_matcher_test_lib.h:
map_matcher_test_lib.cpp:
map_matcher_test_node.cpp:
任何帮助表示赞赏。
map_matcher_test_lib.cpp:
但是,还要确保
(32个答案)
3年前关闭。
我在项目中收到“
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();
}
任何帮助表示赞赏。
最佳答案
您的头文件中有一次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
{
void Mapmatcher::ransacMatches(cv::Mat matGlob, cv::Mat matLoc, Pose &pose)
{
// some code here...
}
}
但是,还要确保
Mapmatcher
的类定义也位于标头的名称空间内。09-04 17:08