[英]implicitly-declared ‘...’ is deprecated [-Wdeprecated-copy] in compiling TinyMT on GitHub
我在 StackOverflow 上研究过类似的问题,但我不知道该怎么做。
以下是我目前面临的错误(有些文本是日文的)。
$ make
g++ -Wall -Wextra -O3 -I../include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -o tinymt32dc tinymt32dc.cpp parse_opt.o -lntl
次のファイルから読み込み: tinymt32dc.cpp:29:
../include/search_all.hpp: In instantiation of ‘bool tinymt::all_in_one<T, G, ST, STLSB, SG>::search(G&, ST*, STLSB*, bool) [with T = unsigned int; G = tinymt::tinymt32; ST = MTToolBox::search_temper<tinymt::tinymt32, unsigned int, 32, 1, 23, 6>; STLSB = MTToolBox::search_temper<tinymt::tinymt32, unsigned int, 32, 1, 9, 5, true>; SG = MTToolBox::Sequential<unsigned int>]’:
tinymt32dc.cpp:84:16: required from here
../include/search_all.hpp:92:20: 警告: implicitly-declared ‘constexpr tinymt::tinymt32& tinymt::tinymt32::operator=(const tinymt::tinymt32&)’ is deprecated [-Wdeprecated-copy]
92 | rand = s.get_random();
| ~~~~~^~~~~~~~~~~~~~~~
次のファイルから読み込み: tinymt32dc.cpp:31:
tinymt32search.hpp:151:9: 備考: because ‘tinymt::tinymt32’ has user-provided ‘tinymt::tinymt32::tinymt32(const tinymt::tinymt32&)’
151 | tinymt32(const tinymt32& src) : param(src.param) {
| ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: -lntl が見つかりません: No such file or directory
collect2: エラー: ld はステータス 1 で終了しました
make: *** [Makefile:23: tinymt32dc] エラー 1
我不确定我应该解决什么问题。
我正在编译一个名为“TinyMT”的程序,您可以在下面的 URL 中看到源代码。
https://github.com/MersenneTwister-Lab/TinyMT
我的环境是 Cygwin,带有以下软件包(由 Cygwin 安装)。
(我记得自己安装的)
警告说tinymt32
class 有一个用户定义的复制构造函数,但没有定义复制赋值运算符。 这违反了三/五规则,表明管理tinymt32
可能持有的任何资源存在潜在问题。
所以这个警告不是针对图书馆的用户,而是它的作者忘记定义operator=
或至少将其标记为默认值。
如果您想修复该 class,请执行此操作。 如果默认operator=
足够,请将其default
-ed 定义添加到 class。 如果您不想修改库的代码,您可以做的不多,也许至少看看调用这个默认实现是否安全。
从我非常简短的代码来看,它看起来就像复制 ctor 重置了reverse_bit_flag
而隐式/默认operator=
将从源中复制它,不确定这有多相关。 但是 class 只存储值,没有需要特别注意的资源,因此代码应该是相当安全的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.