将可调用对象作为参数传递时,为什么g++会抱怨“之前无效的声明符”?
#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保留标识符。只需更改该函数的名称,您的代码就会起作用。