英特尔编译器不会在另一个类中编译私有前向类声明

时间:2009-09-18 11:17:21

标签: c++ boost intel

我在使用英特尔编译器11.1.xxx时遇到了一些问题 在使用MS CL编译器编译期间不会出现这些问题。 我不知道代码有什么问题(外部升压库头) 我最终遇到了多个错误:

  
    

.. \升压/日志/属性/ attribute_set.hpp(148):     错误:声明不兼容     用常量“bool fConstV”(声明     在第147行)           模板< bool fConstV>朋友类iter;                          ^               检测期间:                 类的实例化“boost :: log_mt :: basic_attribute_set     [与CharT = char]“在第252行     “.. \升压/日志/来源/ basic_logger.hpp”                 类的实例化“boost :: log_mt :: sources :: basic_logger [with     图表=字符,     FinalT =的boost :: log_mt ::来源::记录仪,     ThreadingModelT =的boost :: log_mt ::来源:: single_thread_model]”     在738行     “.. \升压/日志/来源/ basic_logger.hpp”                 实例化类“boost :: log_mt :: sources :: basic_composite_logger [with CharT = char,     FinalT =的boost :: log_mt ::来源::记录仪,     FeaturesT =提振:: MPL ::已经     ctor0]“在787行     “.. \升压/数/来源/ basic_logger.hpp”

  
     

.. \升压/日志/属性/ named_scope.hpp(146):   错误:声明不兼容   用常量“bool fConstV”(声明   在第145行)         模板< bool fConstV>朋友类iter;                        ^             检测期间:               类的实例化“boost :: log_mt :: attributes :: basic_named_scope_list   [与CharT = char]“在第364行               类的实例化“boost :: log_mt :: attributes :: basic_named_scope   [与CharT = char]“在第94行   “.. \升压/日志/格式化/ named_scope.hpp”               类的实例化“boost :: log_mt :: formatters :: fmt_named_scope   [使用CharT = char]“在第270行   “.. \升压/数/格式化/ named_scope.hpp”

attributeset.hpp

    template< typename CharT >
    class basic_attribute_set
    {
        /* ... */
        template< bool fConstV > class iter;
        template< bool fConstV > friend class iter;
        template< bool fConstV >

       class iter
       {
            friend class iter< !fConstV >;
            friend class basic_attribute_set< CharT >;
            /* ... */
            /* ... */
       }
    }

basiclogger.hpp

   class logger : public basic_composite_logger< char, logger, single_thread_model, mpl::vector0< > >
   {
       BOOST_LOG_FORWARD_LOGGER_CONSTRUCTORS(logger)
   };

欢迎任何提示。

1 个答案:

答案 0 :(得分:0)

也许在第148行你想要template <bool fConstV> friend class iter<fConstV>;?但是,当iter被声明为嵌套类时,我认为你不需要朋友声明;