将可调用对象作为参数传递时,为什么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保留标识符。只需更改该函数的名称,您的代码就会起作用。


以上是将可调用对象作为参数传递时,为什么g++会抱怨“之前无效的声明符”?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>