2

请帮忙,我需要在 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 一样松散地对待这些东西?

如何确保在需要时定义类型?谢谢!

4

0 回答 0