c++ - 当将可调用对象作为参数传递时,为什么 g++ 会抱怨“之前声明无效”?
问题描述
#include <iostream>
#include <vector>
#include <functional>
struct Callable {
void operator()() {
std::cout << "hello world\n";
}
};
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
保留的标识符。只需更改该函数的名称,您的代码就可以工作。
推荐阅读
- android - 同一设备的前置摄像头和后置摄像头可以支持不同的硬件级别吗?
- apache - IIS 10/Apache 问题 - web.config
- github - Github 操作,gradle。git log 的 pretty=format 标志不起作用
- python - 将字典字符串转换为字典列表
- javascript - React Native - 如何使用 UI 动态更新应用程序语言?
- javascript - Java 返回 cannont invoke ScriptEngine 错误
- database - 我的 ER 图是否正确地代表了一个基本网站?
- python - Python:删除具有两个特定条件的数据帧行并保留其余行
- css - Emotion vs Styled-Components css` prop
- python - lineplot 线上有不同的颜色。可视化时间序列