test.cpp:(.text+0x3b7):对‘TemplateMatch::TemplateMatch(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’未定义的引用 test.cpp:(.text+0x3c3):对‘TemplateMatch::~TemplateMatch()’未定义的引用 collect2: error: ld returned 1 exit status
时间: 2023-09-14 17:08:33 浏览: 155
这个错误提示是 C++ 编译器给出的,它告诉我们在链接时找不到 `TemplateMatch` 的构造函数和析构函数的定义。可能的原因是 `TemplateMatch` 的定义没有被正确链接进来,或者是在使用该类的源文件中没有包含正确的头文件。请检查代码中是否有相关的定义和头文件,并确保它们被正确链接。
相关问题
template_match.cpp:14:50: error: no matching function for call to ‘TemplateMatch::ParallelMatch(std::vector<std::__cxx11::basic_string<char> >::const_iterator, std::vector<std::__cxx11::basic_string<char> >::const_iterator)’ ParallelMatch(templates.begin(), templates.end()); ^ In file included from template_match.cpp:1:0: template_match.h:13:7: note: candidate: void TemplateMatch::ParallelMatch(std::vector<std::__cxx11::basic_string<char> >::iterator, std::vector<std::__cxx11::basic_string<char> >::iterator) void ParallelMatch(std::vector<std::string>::iterator first, std::vector<std::string>::iterator last);
这个错误提示表明在你的代码中调用了一个不存在的函数。具体来说,这个函数是`TemplateMatch::ParallelMatch`,它期望接收两个`std::vector<std::string>::iterator`类型的参数,但是你传入的却是`std::vector<std::__cxx11::basic_string<char> >::const_iterator`类型的参数,因此编译器找不到匹配的函数。
解决这个问题的方法是修改`ParallelMatch`函数的参数类型,将其改为`const_iterator`类型即可。同时,你也需要确保在调用`ParallelMatch`函数时传入正确的参数类型。
src/template_match.cpp: In constructor ‘TemplateMatch::TemplateMatch(const std::vector<std::__cxx11::basic_string<char> >&, std::__cxx11::string&)’: src/template_match.cpp:54:66: error: no matching function for call to ‘Poco::ThreadPool::start(TemplateMatch::MatchTask*)’ match_pool.start(new MatchTask(stream_template[i], code_stream)); ^
这个错误是因为 `Poco::ThreadPool::start` 函数没有接受 `TemplateMatch::MatchTask*` 类型的参数。你可以尝试将其改为 `Poco::ThreadPool::start(std::unique_ptr<MatchTask>(new MatchTask(stream_template[i], code_stream)))`,这样可以通过 `std::unique_ptr` 来自动管理内存,避免内存泄漏问题。或者你也可以手动释放内存,即 `match_pool.start(new MatchTask(stream_template[i], code_stream)); delete new MatchTask(stream_template[i], code_stream);`。但是,这种方式容易出现内存泄漏问题,所以建议使用 `std::unique_ptr`。
阅读全文