boost :: system ::(...)_ category定义但未使用

Ano*_*ous 11 c++ boost compiler-warnings unused-variables

我目前正在收到编译器警告,类似于我在问题标题中给出的警告.警告如......

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

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

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

任何人都可以对这些警告突然出现的原因有所了解吗?我完全错过了什么吗?

PS警告是最高级别.

M. *_*its 21

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

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif
Run Code Online (Sandbox Code Playgroud)


Cha*_*via 7

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

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

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

  • ...因为这个,不能再使用`-Werror`了 (13认同)