请帮助,我需要从2005年开始在以下(不是实际的,仅仅是说明性的)MSVC代码中解开反复出现的依赖关系。我正在使用这样的g ++进行编译:
g++ -std=c++x -I. -o -Wall -Wextra -pedantic example example.cpp
代码:
template <typename R> struct AAA
{
typedef R rep_t;
static function(rep_t n, rep_t d) {return d;}
};
template <typename T> struct HELPER_CLASS
{
//arithmetic operators:
friend T operator/ (T const& lhs) {T res; res /=lhs; return res;}
//... so on, also for comparison operators
}
template <typename T=long> class BBB : public HELPER_CLASS< BBB<T> >
{
typedef typename HELPER_CLASS< BBB<T> >::template AAA<T> P;
typedef typename AAA<T>::rep_t rep_t;
public:
BBB& operator/=(BBB const& that)
{this->rep_=P::function(this->rep_, that.rep_); return *this;}
private:
rep_t rep_;
}
编译这个,我收到以下错误:
错误:'struct HELPER_CLASS&gt;'
中没有名为'AAA'的类模板
当我在HELPER_CLASS中声明AAA时,它看起来像这样:
template <typename T> struct HELPER_CLASS
{
//arithmetic operators:
friend T operator/ (T const& lhs)
{T res; res /=lhs; return res;}
//etc. for e.g. comparison operators
template <typename R> struct AAA;
};
我留下了这个错误:
错误:类型不完整HELPER_CLASS&lt; BBB&gt; :: AAA'用于嵌套名称说明符。
有没有办法说服g ++像MSVC那样松散地对待这些东西?
如何确保在需要时定义类型? 谢谢!