英特尔编译器不编译另一个类中的私有前向类声明
Posted
技术标签:
【中文标题】英特尔编译器不编译另一个类中的私有前向类声明【英文标题】:Intel compiler does not compile private forward class declaration in another class 【发布时间】:2009-09-18 11:17:20 【问题描述】:我在使用英特尔编译器 11.1.xxx 时遇到了一些问题 在使用 MS CL 编译器进行编译期间不会出现这些问题。 而且我不明白代码有什么问题(外部boost库头文件) 我最终遇到了多个错误:
..\boost/log/attributes/attribute_set.hpp(148): 错误:声明不兼容 带有常量“bool fConstV”(声明 在第 147 行) 模板 朋友类迭代器; ^ 在以下期间检测到: 类“boost::log_mt::basic_attribute_set”的实例化 [with CharT=char]”在第 252 行 “..\boost/log/sources/basic_logger.hpp” 类“boost::log_mt::sources::basic_logger [with CharT=char, FinalT=boost::log_mt::sources::logger, ThreadingModelT=boost::log_mt::sources::single_thread_model]" 在第 738 行 “..\boost/log/sources/basic_logger.hpp” 类“boost::log_mt::sources::basic_composite_logger [with CharT=char, FinalT=boost::log_mt::sources::logger, 特征T=boost::mpl::ve ctor0]”在第 787 行 “..\boost/log/sources/basic_logger.hpp”
..\boost/log/attributes/named_scope.hpp(146): 错误:声明不兼容 带有常量“bool fConstV”(声明 在第 145 行) 模板 朋友类迭代器; ^ 在以下期间检测到: 类“boost::log_mt::attributes::basic_named_scope_list”的实例化 [with CharT=char]”在第 364 行 类“boost::log_mt::attributes::basic_named_scope”的实例化 [with CharT=char]”在第 94 行 “..\boost/log/formatters/named_scope.hpp” 类“boost::log_mt::formatters::fmt_named_scope”的实例化 [with CharT=char]”在第 270 行 "..\boost/log/formatters/named_scope.hpp"
属性集.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)
;
欢迎任何提示。
【问题讨论】:
我已经删除了 147 和 148,然后正确编译了代码,但我还没有链接它。如果二进制文件可以工作,我会更新此消息。 【参考方案1】:也许在第 148 行你想要template <bool fConstV> friend class iter<fConstV>;
?虽然iter
被声明为嵌套类,但我认为您不需要朋友声明;
【讨论】:
模板以上是关于英特尔编译器不编译另一个类中的私有前向类声明的主要内容,如果未能解决你的问题,请参考以下文章