如何沉默"其类型使用匿名命名空间[-Werror]"gcc版本4.8.2

Pan*_*nch 2 c++ gcc boost gcc-warning

在我的项目的一个头文件中,以下行包含在inline方法中

typedef boost::archive::iterators::transform_width<boost::archive::iterators::binary_from_base64<      boost::archive::iterators::remove_whitespace<std::string::const_iterator>>, 8, 6> Base64ToBin;
Run Code Online (Sandbox Code Playgroud)

当我使用gcc 4.8.2编译它时,我收到以下错误:

错误:'boost :: archive :: iterators :: remove_whitespace <__ gnu_cxx :: __ normal_iterator >>'有一个字段'boost :: archive :: iterators :: remove_whitespace <__ gnu_cxx :: __ normal_iterator >>> ::'其类型使用匿名命名空间[-Werror]

我真的很努力,但无法解决这个问题,同样来自link1link2,看起来这是一个较低版本的gcc的问题.有人可以建议如何使这个警告保持沉默或者克服这个警告.我正在使用-Werror标志编译.

MSa*_*ers 7

这看起来像是一个正确的警告.因为代码位于标题中,所以它将包含在多个文件中,但匿名命名空间对于每个文件都是唯一的.这意味着该类型在任何地方都没有相同的定义.

解决方案:将相关代码移动到.cpp文件.

  • 您能否解释一下在“typedef”上下文中什么是匿名的。我真的无法从中得到任何东西。那真的会对我有帮助。 (2认同)
  • 我会建议多加小心;不仅仅是试图消除这个警告,它是*真实的*——只是编译器无法判断是否存在实际危险。链接器在每次使用时确实将匿名对象视为不同的实体,这可能是一个挥之不去的危险,一旦这种类型与静态数据一起使用,在多个编译单元中共享,尤其是在初始化时。我被这种情况的变化咬得很厉害...... (2认同)