代码之家  ›  专栏  ›  技术社区  ›  Thomas Wagenaar

VisualStudioC++中交叉编译错误

  •  0
  • Thomas Wagenaar  · 技术社区  · 5 年前

    我最近把Windows C++应用程序转换成Linux C++应用程序,并使用Debian的Windows子系统将其编译为Linux。但是,通过使用json库,我得到以下错误 nlohmann

    no match for 'operator-' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<double> >::value_type {aka double}' and 'nlohmann::basic_json<>::value_type {aka nlohmann::basic_json<>}')
    

    到处 例如,我在json元素和double元素之间使用运算符。例如:

    MSE_total += pow(ref.z[j*multiplier] - actual[j]["z"], 2) / pow(ref.z[j*multiplier], 2);
    

    这条线给出了上面的错误。我是否应该明确说明json中的变量类型?我该怎么做?

    1 回复  |  直到 5 年前
        1
  •  0
  •   YSC    5 年前

    no operator- taking a nlohmann::basic_json . 我想那是吧

    ref.z[j*multiplier] - actual[j]["z"]
    

    期望 actual[j]["z"] 要转换为 double 通过its operator ValueType() ... 它应该(扔 type_error.302 如果基础类型不匹配)。

    为什么不呢?我打赌nlohmann的json版本号与您的windows和linux版本不同。

    解决方法: cast that value to a double actual[j]["z"].get<double>() ).