首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当将可调用对象作为参数传递时,为什么g++会抱怨“之前无效的声明符”?

当将可调用对象作为参数传递时,为什么g++会抱怨“之前无效的声明符”?
EN

Stack Overflow用户
提问于 2020-12-04 01:10:11
回答 1查看 176关注 0票数 2
代码语言:javascript
复制
#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'的形式报告错误。

为什么会出现这个错误?它意味着什么,以及如何修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 01:12:56

错误消息并不能真正帮助发现问题,但实际上编译器可以说的也不多了。问题是register是一个保留标识符。只需更改该函数的名称,您的代码就可以正常工作。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65130729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档