没有名为 'function' 的模板

No template named 'function'

我正在尝试在 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...
                                          ^

我试过修改函数头文件。之后我可以编译那个模块,但是编译器不能 link 和其他模块:

"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;)。

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

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

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

std::function 一起工作。我不知道为什么需要 std::,因为在文件顶部告诉了命名空间 (using namespace std;),但它有效。