请帮忙,我需要在 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>”中没有名为“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< BBB >::AAA'。
有没有办法说服 g++ 像 MSVC 一样松散地对待这些东西?
如何确保在需要时定义类型?谢谢!