【问题标题】:xtgmath.h has compile-time errorsxtgmath.h 有编译时错误
【发布时间】:2015-07-26 06:53:09
【问题描述】:

我正在尝试在 Visual Studio 2013 Professional 中编译一个较旧的 C++ 程序。我遇到编译错误,Visual Studio 说xtgmath.h 文件中有语法错误。完整的日志是:

1> fill.cpp 1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179): 错误 C2059: 语法错误: '('

1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179): 错误 C2027: 使用未定义类型 'std::enable_if'

1> C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtr1common(67) : 参见 'std::enable_if' 的声明

1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179): 警告 C4346: 'std::is_integral<_ty>::value' : 从属名称不是类型

1> 带有'typename'的前缀表示类型

1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179): 错误 C2988: 无法识别的模板声明/定义

1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179):错误 C2143:语法错误:在 ',' 之前缺少 ')'

1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179): 错误 C2059: 语法错误: ','

1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xtgmath.h(179):错误 C2059:语法错误:')'

我尝试了其他人推荐的几种不同的方法,但似乎都不起作用。我试图在源文件上运行预处理器并检查生成的代码,但它没有提供任何见解。有人知道这里出了什么问题吗?

【问题讨论】:

  • 我的猜测是宏破坏了一些东西。
  • 这就是微软不愿意支持 C99 的原因,很多常见的短词被丢弃在全局命名空间中。但他们必须这样做,C++11 要求它。你必须追赶cbrt。用全大写的方式编写宏以避免这种损失。

标签: c++ visual-studio-2013


【解决方案1】:

我遇到了和你一样的错误——使用旧代码,现在尝试在 VS2013 下编译它。对我来说,问题与 xtgmath.h 的这一行有关:

_GENERIC_MATH1(round, _CRTSPECIAL)

我把它归结为 round 是在 stdafx.h 中预定义的。在 VS2013 中,round 已经是一个内置函数,并且定义覆盖会导致编译错误。

为了解决这个问题,我注释掉了 stdafx.h 中的 round 定义。

【讨论】:

  • 您可以从错误消息中的行号很容易看出不是 round 导致了这种情况。
  • 同意,但问题可能与我在其他地方定义了 cbrt 函数的问题相似
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多