std::chrono 在传递变量时不起作用
std::chrono doesn't work if passing a variable
我遇到了一个std::chrono的奇怪错误,如果我这样做:
TimeHandling time(std::chrono::milliseconds(1000 / 125));
time.start();
一切都很好。但如果我把毫秒值放在一个变量中:
int mpl = 1000 / 125;
TimeHandling time(std::chrono::milliseconds(mpl));
time.start();
g++抛出此错误:
request for member ‘start’ in ‘time’, which is of non-class type ‘TimeHandling(std::chrono::milliseconds) {aka TimeHandling(std::chrono::duration<long int, std::ratio<1l, 1000l> >)}’
有人知道为什么吗?
第二个版本声明了一个带有参数mpl
的函数
请参阅http://en.wikipedia.org/wiki/Most_vexing_parse和https://stackoverflow.com/tags/most-vexing-parse/info
C++11允许您使用大括号来消除声明中初始化的歧义:
TimeHandling time{std::chrono::milliseconds(mpl)};
或者,对两个初始化都使用大括号:
TimeHandling time{std::chrono::milliseconds{mpl}};
此行
TimeHandling time(std::chrono::milliseconds(mpl));
声明了一个返回TimeHandling
对象的函数,并接受一个名为mpl
的std::chrono::milliseconds
参数。
当编译器面临将此类语句视为函数声明或构造函数调用的困境时,(标准)会强制将其视为函数宣言。
使用大括号初始化可以更正此问题并消除语句的歧义。
相关文章:
- 通过 get-Method 访问变量在类外不起作用
- 键盘不起作用 - Arduino Uno - 与变量有关的多个错误
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 指针变量在 cout 函数中不起作用
- C++结构模板变量快捷方式定义不起作用
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 变量和常数的C++划分不起作用
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 为什么这个条件变量不起作用
- 在循环中更改数组的变量不起作用
- 添加到私人变量不起作用
- 全球变量不起作用Raspberry Pi
- 为什么我的加权_grade变量不起作用
- 调用函数从类返回私有变量不起作用
- 递增引用变量不起作用
- 为什么作用域解析对覆盖的变量不起作用?
- Boost::scoped_lock对局部静态变量不起作用
- 为什么<int>常量引用返回的向量变量不起作用
- OpenGL 3.3 着色器统一变量不起作用