1

Boost.Log と GCC 4.4.7 によって生成される次の警告メッセージを抑制する方法を誰か教えてもらえますか? 私のプロジェクトは C++11 モードでビルドされています ( -std=c++0xGCC 4.4.7 で)。

src/Logger.cc:7: warning: missing initializer for member ‘boost::log::v2_mt_posix::expressions::attribute_keyword<tag::severity, boost::phoenix::actor>::proto_expr_’

src/Logger.ccBoost.Log のラッパーであるロギング クラスのソース ファイルはどこにありますか。7 行目では、次のように Boost.Log マクロの 1 つを使用します。Logger::ESeverityLevelで定義された列挙型Logger.hです。

BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", Logger::ESeverityLevel)

このマクロは次のように展開できます。

namespace tag    {\
        struct severity :\
            public ::boost::log::expressions::keyword_descriptor\
        {\
            typedef Logger::ESeverityLevel value_type;\
            static ::boost::log::attribute_name get_name() { return ::boost::log::attribute_name("Severity"); }\
        };\
    }\
    typedef ::boost::log::expressions::attribute_keyword< tag::severity > severity_type;    const severity_type severity = {};

severity_typeClang (Apple LLVM バージョン 6.0) では有効ですが、の初期化でこの警告が表示されるようです。

このマクロの公式のサンプル コードは、 http://theboostcplibraries.com/boost.log#ex.log_05にあります。

4

1 に答える 1

4

1 つのアプローチは、組み込みの#pragmasを使用して GCC で警告を無効にすることです。

#pragma GCC diagnostic push      // Save the current warning state
#pragma GCC diagnostic ignored "-Wmissing-field-initializers" // Disable the warning you're getting

...
// offending code
BOOST_LOG_ATTRIBUTE_KEYWORD(severity, "Severity", Logger::ESeverityLevel)
...

#pragma GCC diagnostic pop        // Restore previous default behaviour

を使用して、コマンド ラインでこの動作を無効にすることもできます-Wno-missing-field-initializers

于 2014-12-08T09:16:27.920 に答える