【问题标题】:ERROR: unable to find numeric literal operator 'operator""U'?错误:无法找到数字文字运算符“运算符”“U”?
【发布时间】:2018-01-29 20:20:34
【问题描述】:

我在 Vivado 和 SDK 2017.4 上使用 ARM v7 g++ 编译器。我有相同的代码工作没有任何问题,但现在它在更改与此无关的内容后抛出此错误,显然。我已经撤消了更改,但它仍然抱怨。

../../MicroZed_design9_bsp/ps7_cortexa9_0/include/xparameters.h:557:40: error: unable to find numeric literal operator 'operator""U'
#define XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ 1e+08U

这是从哪里来的?

【问题讨论】:

  • 它来自1e+08U末尾的U

标签: c++ xilinx vivado zynq


【解决方案1】:

U 在浮点文字的末尾无效。有效的后缀是fF 表示floatlL 表示long double,没有后缀默认为doubleU 表示unsigned 只能用在整数文字的末尾。

所以1e+08U 无效,因为1e+08 是浮点文字的语法。指数符号不能用于整数。如果你想要一个unsigned long 整数,写100000000UL

【讨论】:

  • 感谢您的回答巴尔玛。我懂了。问题是该文件是由软件自动生成的,并且之前已编译。所以我不知道发生了什么。
  • 好的,我找到了临时解决方案。我不知道它是怎么发生的,因为是 Vivado 生成了这条线,它与 AXI 时钟 (100MHz) 相关联。 #define XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ 1e+08U。我已经删除了指数,现在它可以编译了。 #define XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ 100000000U。但是,我不知道为什么之前编译的代码。我没有将 AXI 时钟从以前的版本更改为这个版本。感谢@Barmar 的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
相关资源
最近更新 更多