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' がネストされた名前指定子で使用されています。

これらをMSVCと同じくらい大まかに扱うようにg ++を納得させる方法はありますか?

型が必要になったら定義されるようにするにはどうすればよいですか? ありがとう!

4

0 に答える 0