gpt4 book ai didi

c++ - 隐式常量转换溢出 [-Werror=overflow]

转载 作者:行者123 更新时间:2023-12-02 09:58:43 30 4
gpt4 key购买 nike

我正在使用模块来处理依赖项的服务器上远程工作。我正在尝试安装 dssp (https://github.com/cmbi/dssp)。在 github 上可以看到依赖项。
我加载的模块是:

Currently Loaded Modules:
1) slurm/18-08-4-1-hits 4) numactl/.2.0.10-GCC-4.8.4 (H) 7) OpenBLAS/0.2.13-GCC-4.8.4-
LAPACK-3.5.0 10) ScaLAPACK/2.0.2-gompi-1.7.20-OpenBLAS-0.2.13-LAPACK-3.5.0 13)
zlib/.1.2.8-goolf-1.7.20 (H)
2) sge/dummy 5) hwloc/.1.10.1-GCC-4.8.4 (H) 8) gompi/1.7.20
11) goolf/1.7.20 14) Boost/1.58.0-goolf-
1.7.20
3) GCC/4.8.4 6) OpenMPI/1.8.4-GCC-4.8.4 9) FFTW/3.3.4-gompi-1.7.20
12) bzip2/.1.0.6-goolf-1.7.20 (H)
要安装,我从 tar 中提取 dssp 并 tun ./autogen 、 ./configure 然后 make。在我看来,前两个步骤没有出现错误,但运行 make 我得到:
In file included from src/mkdssp.cpp:26:0:
/hits/sw/shared/apps/Boost/1.58.0-goolf-1.7.20/include/boost/iostreams/filter/gzip.hpp: In
instantiation of
‘boost::iostreams::basic_gzip_compressor<Alloc>::basic_gzip_compressor(const
boost::iostreams::gzip_params&, int) [with Alloc = std::allocator<char>]’:
src/mkdssp.cpp:173:38: required from here
/hits/sw/shared/apps/Boost/1.58.0-goolf-
1.7.20/include/boost/iostreams/filter/gzip.hpp:674:13: error: overflow in implicit constant
conversion [-Werror=overflow]
header_ += gzip::magic::id2; // ID2.
^
cc1plus: all warnings being treated as errors
我猜错误是
error: overflow in implicit constant conversion [-Werror=overflow]
header_ += gzip::magic::id2; // ID2.
在我看来,这似乎在我没有写过的 boost 库中。我无法理解错误的含义,而且我不是 C++ 程序员。
任何帮助,将不胜感激。

最佳答案

I guess the error is

error: overflow in implicit constant conversion [-Werror=overflow]
header_ += gzip::magic::id2; // ID2.

你猜对了。那就是错误,或者更确切地说是被要求视为错误的警告。

This seems to me to be inside the boost library


是的,这就是“错误”所在。

I cannot understand what the error means

header_的类型是 std::string并且它的复合赋值运算符接受 char作为右手操作数。但是, int反而通过了。因此,存在从 int 的隐式转换。至 char .在目标系统上,并非 int 的所有值可以用 char 类型表示,因此该值可能会被此转换更改。
编译器被要求对可能改变值的隐式转换发出警告,并将此类警告视为错误。因此,在 Boost header 中存在这种转换会导致编译失败。

Any help would be appreciated.


编译的方法;其中任何一个都应该起作用:
  • 使用较新版本的 Boost。此警告已在大约 3 年前发布的 1.65 版中得到修复。
  • 不要要求编译器将警告视为错误。
  • 不要要求编译器警告隐式转换。
  • 要求编译器不要从 boost header 发出诊断信息。这通常可以通过将包含 boost header 的目录指定为“系统”包含目录来实现。
  • 关于c++ - 隐式常量转换溢出 [-Werror=overflow],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63906503/

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