对链接错误的未定义引用
undefined reference to linking error
我在项目中遇到“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();
}
感谢任何帮助。
您的 header 文件中有一次 class Mapmatcher
,然后在您的源文件中有另一次,这是一个错误并且违反了一次定义规则。您应该只在 header 文件中包含 class 定义并在源文件中实现方法:
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...
}
}
确保 class 对 Mapmatcher
的定义也在 header 的命名空间内。
我在项目中遇到“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();
}
感谢任何帮助。
您的 header 文件中有一次 class Mapmatcher
,然后在您的源文件中有另一次,这是一个错误并且违反了一次定义规则。您应该只在 header 文件中包含 class 定义并在源文件中实现方法:
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...
}
}
确保 class 对 Mapmatcher
的定义也在 header 的命名空间内。