我正在尝试在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;
)。
答案 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::
),但是它可以工作。