我目前正在收到类似于我在问题标题中提供的警告的编译器警告。警告如......

警告:'boost :: system :: generic_category'已定义但未使用

警告:'boost :: system :: posix_category'已定义但未使用

警告:'boost :: system :: errno_ecat'已定义但未使用

警告:'boost :: system :: native_ecat'已定义但未使用

据我所知,该计划没有受到任何影响。但是,我不喜欢挂着警告,但我不知道这些警告试图告诉我什么,除了那些定义和与boost相关的东西悬挂在某个没有被使用的地方。但是,我已经定义的所有东西,我都用过了。我正在使用的boost库是随机库和文件系统库。

当我检查警告的来源时,它会调出Boost的error_category.hpp文件并突出显示一些 static const ,它们被注释为“预定义的错误类别”。或“弃用的同义词”。也许这个问题与我在使用库时的错误处理(或缺少)有关?

任何人都可以就这些警告突然出现的原因提供一些见解吗?我完全错过了什么吗?

P.S。警告是最高级别。

有帮助吗?

解决方案

这与Boost.System库中的error_code库有关。 Boost error_codes包含两个属性:值和类别。为了使error_codes可扩展以便库用户可以设计自己的错误类别,boost设计人员需要某种方式来表示唯一的错误代码类别。一个简单的ID号是不够的,因为这可能导致两个项目使用冲突的ID号来表示自定义错误类别。

基本上,他们所做的是以静态对象的形式使用内存地址,这些对象继承自基类 error_category 。除了用作特定错误类别的唯一标识符之外,这些变量实际上不会执行任何操作。因为它们本质上是在内存中具有唯一地址的静态虚拟对象,所以您可以轻松创建自己的自定义错误类别,这些类别不会干扰其他错误类别“ID”。有关详细信息,请参见此处

我想你所看到的是这个设计决定的副作用。由于这些变量从未在程序中实际使用过,因此编译器会生成警告。我只想说,我认为你做错了什么。

其他提示

我同意@Charles Salvia,但是至少在Boost 1.44.0中添加了这些定义,这些定义现在已被包装 - 被排除在已弃用之外。因此,如果您不使用它们,请在包含头文件之前包含以下行:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

我尝试了@ M.Tibbits建议的 BOOST_SYSTEM_NO_DEPRECATED ,它似乎删除了一些警告实例(在linux下构建的大系统中),但不是全部。

但是,使用 -isystem 而不是 -I 来包含boost标头(并忽略它们的问题)对我有用。

建议 https://exceptionshub.com/how-do-you-disable-the-unused-variable-warnings-coming-out-of-gcc.html

由GNU GCC解释(倾斜): http://gcc.gnu .ORG / onlinedocs / GCC /指南-Options.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top