#include <iostream>
#include <vector>
#include <functional>
struct Callable {
void operator()() {
std::cout << "hello worldn";
}
};
std::vector<std::function<void()>> cbs;
void register(std::function<void()>&& cb) { // <-- ERROR
cbs.emplace_back(std::move(cb));
}
int main() {
Callable c;
register(std::bind(std::ref(c)));
for (auto& cb : cbs) {
cb();
}
return 0;
}
在上面的C++代码段中,g++-9
在注释行中报告错误为error: invalid declarator before 'cb'
。
为什么会出现此错误?它意味着什么,以及如何修复它?
错误消息并不能真正帮助发现问题,但编译器实际上没有什么好说的。问题是register
是一个保留的标识符。只需更改该函数的名称,您的代码就可以工作了。