未定义的链接错误引用

时间:2016-10-10 12:47:48

标签: c++ class pointers constructor ros

我得到了" 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();
}

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您的头文件中有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类定义位于标题中的命名空间内。