1

私が取り組んでいるコードはおおよそ次のとおりです。

// List.h
template <typename T> class List{
    template <typename TT> class Node;
    Node<T> *head;
    /* (...) */
    template <bool D> class iterator1{
        protected: Node<T> this->n;
        public: iterator1( Node<T> *nn ) { n = nn }
        /* (...) */
    };
    template <bool D> class iterator2 : public iterator1<D>{
        public:
        iterator2( Node<T> *nn ) : iterator1<D>( nn ) {}
        void fun( Node<T> *nn ) { n = nn; }
        /* (...) */
    };
};

(上記の正確なコードが必要な場合は、前の質問を参照してください)

// Matrix.h
#include "List.h"
template <typename T>
class Matrix : List<T> {
    /* (...) - some fields */
    class element {
        supervised_frame<1> *source; // line#15
        /* (...) - some methods */
    };
};

g++で次のエラーが発生します。

 In file included from main.cpp:2:
 Matrix.h:15: error: ISO C++ forbids declaration of ‘supervised_frame’ with no type
 Matrix.h:15: error: expected ‘;’ before ‘&lt;’ token
4

2 に答える 2

2

Matrix<T>::elementクラスはクラスとは関係ないと思いますList<T>。だから私はあなたが持っているべきだと思いますtypename List<T>::template supervised_frame<1>

于 2012-12-13T06:04:52.123 に答える
2

前の問題と同様-使用typename List<T>::supervised_frame<1> *source;これは、supervised_frame<1>が依存型であるためです。つまり、テンプレートパラメータに依存しているためです。T

于 2012-12-13T06:05:06.763 に答える