为什么 g++ 在传递可调用对象作为参数时抱怨"invalid declarator before"?


#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是一个保留的标识符。只需更改该函数的名称,您的代码就可以工作了。

相关内容

最新更新