没有名为“功能”的模板

时间:2019-09-07 15:46:01

标签: c++ macos gcc g++

我正在尝试在Mac上编译用C ++编写的代码,并且有一个功能

tuple<string, string, int> getURL(const string& url, const function<void(CURL*)>& opts)
{...}

有错误

      no template named 'function'
  ...int> getURL(const string& url, const funct...
                                          ^

我试图修改函数头。之后,我可以编译该模块,但是编译器无法与其他模块链接:

"getURL(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (void*)> const&)", referenced from:
      CensysScanner::getHostInfo(Host*) in CensysScanner.cpp.o
      DebianLookup::FindVulnerability(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, OpSys, double) in DebianLookup.cpp.o
      DebianLookup::GetChangelog(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, OpSys, double) in DebianLookup.cpp.o
      EnterpriseLinuxLookup::FindVulnerability(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, OpSys, double) in EnterpriseLinuxLookup.cpp.o
      EnterpriseLinuxLookup::GetChangelog(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, OpSys, double) in EnterpriseLinuxLookup.cpp.o
      LooquerScanner::getHostInfo(Host*) in LooquerScanner.cpp.o
      ShodanScanner::getHostInfo(Host*) in ShodanScanner.cpp.o
      ...

我还包含了功能模块(#include <functional>),并且我正在使用std名称空间(using namespace std;)。

2 个答案:

答案 0 :(得分:1)

"getURL(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::function<void (void*)> const&)", referenced from:

其他目标文件引用的此符号作为参数std::__1::function。这是标准库中的std::function,显然应该在您的第一个代码块中引用function

检查是否包含#include<functional>,是否正在使用C ++ 11或更高版本进行编译,并写成std::function而不是function或检查是否有using语句将function中的std导入当前名称空间,例如using namespace std;using std::function;

答案 1 :(得分:0)

使用const board = `##### ##### ##### ##### #####`; let lines = board.split(/\n/), finalBoard = ''; for (let lineIndex in lines) { const line = lines[lineIndex]; line.replace(/#/g, (match, charIndex) => { const nextIsEmpty = (charIndex % 2 + lineIndex % 2) !== 1; if (nextIsEmpty) finalBoard += ' '; else finalBoard += '#'; }); finalBoard += '\n'; } console.log(finalBoard);可以正常工作。我不知道为什么需要std::function,因为在文件的顶部已经告知了名称空间(std::),但是它可以工作。