C++ 此模板定义中有什么错误? 模板 类myarray{ typedef int位图; 公众: 静态位图数据[N]; }; 模板myarray::位图myarray::数据[N];

C++ 此模板定义中有什么错误? 模板 类myarray{ typedef int位图; 公众: 静态位图数据[N]; }; 模板myarray::位图myarray::数据[N];,c++,templates,C++,Templates,错误:之前需要构造函数、析构函数或类型转换 “myarray” 在myarray::Bitmap之前需要typename,因为它是一个依赖类型: template <int N> class myarray { typedef int Bitmap; public: static Bitmap data[N]; }; template <int N> myarray<N>::Bitmap myarray<N>::data[N];

错误:之前需要构造函数、析构函数或类型转换 “myarray”


myarray::Bitmap
之前需要
typename
,因为它是一个依赖类型:

template <int N>
class myarray {
    typedef int Bitmap;
public:
    static Bitmap data[N];
};

template <int N> myarray<N>::Bitmap myarray<N>::data[N];
模板
类myarray{
typedef int位图;
公众:
静态位图数据[N];
};
模板
typename myarray::Bitmap myarray::data[N];
// ^^^^^^^^

Relevant:下面是一个愚蠢的后续问题:为什么不删除最后一行?这不就是多余的第二次声明吗?啊!我现在明白了。未定义的引用。这是必需的定义,而前面的一行只是声明。
template <int N>
class myarray {
    typedef int Bitmap;
public:
    static Bitmap data[N];
};

   template <int N>
   typename myarray<N>::Bitmap myarray<N>::data[N];
// ^^^^^^^^