gpt4 book ai didi

c++ - 使用 std::qualifier 修复奇怪的编译器错误

转载 作者:行者123 更新时间:2023-11-30 01:40:58 25 4
gpt4 key购买 nike

我正在尝试构建由其他人编写的开源 C++ 库的源文件。这是在 Windows 上使用 Cygwin's mingw-w64 compiler 完成的.我附加的唯一编译器选项是 -std=gnu++11,因为该库依赖于某些 C++11 功能。

以下是他们库中似乎导致问题的一些代码示例:

CPScalar & Abs()
{
m_dValue = std::abs(m_dValue);
return *this;
}

//...

template<typename Unit>
bool SEScalarQuantity<Unit>::Set(const SEScalarQuantity<Unit>& s)
{
if (m_readOnly)
throw CommonDataModelException("Scalar is marked read-only");
if (!s.IsValid())
return false;
m_value = s.m_value;
m_isnan = (std::isnan(m_value)) ? true : false;
m_isinf = (std::isinf(m_value)) ? true : false;
m_unit = s.m_unit;
return true;
}

我在上面的 std:: 限定函数上遇到编译器错误。 m_dValue = std::abs(m_dValue); 行上的编译器错误是

error: call of overloaded 'abs(double&)' is ambiguous

这让我觉得它可能与 question of whether std::abs(0u) is ill-formed 有关以及this answer到类似的 SO 问题。

m_isnan = (std::isnan(m_value)) ? true : false; 下面一行给出了

error: expected unqualified-id before '(' token

还有无数 std:: 的其他用途是编译器不会提示的。如果我删除了给我错误的语句中的所有 std:: 限定符,代码编译得很好。

事实是,这个open source project是(大概)由其他人未经修改构建的,那么我在这里缺少什么?

最佳答案

添加#include <cmath>到正在编译的文件。问题是 std::abs 有几个重载。对于标题中声明的整数类型 <cstdlib>并且编译器提示它不知道使用哪个。不过,我们需要的是 std::abs(double) ,这是在 <cmath> 中声明的.

此代码适用于某些编译器而不适用于其他编译器的原因可能是存在 std::abs(double) 的声明。来自 <cmath> 以外的其他 header .这是允许的,但不是必需的。

关于c++ - 使用 std::qualifier 修复奇怪的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42299151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com