首页 > 解决方案 > 当将可调用对象作为参数传递时,为什么 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'注释行。

为什么我会收到此错误?这是什么意思,如何解决?

标签: c++

解决方案


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


推荐阅读