2011-12-20 38 views
6
template <int N> 
class myarray { 
    typedef int Bitmap; 
public: 
    static Bitmap data[N]; 
}; 

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

error: expected constructor, destructor, or type conversion before ‘myarray’Có gì sai trong định nghĩa mẫu này?

+2

liên quan: http://stackoverflow.com/questions/610245/where-and-why-do-i- have-to-put-the-template-và-typename-keywords –

+0

Bây giờ cho một câu hỏi theo dõi ngu ngốc: Tại sao không chỉ xóa dòng cuối cùng? Đó không phải là một tuyên bố thứ hai dư thừa sao? –

+2

Doh! Tôi hiểu rồi. Tham chiếu không xác định. Đó là định nghĩa * bắt buộc *, trong khi dòng trước đó chỉ là * khai báo *. –

Trả lời

9

Bạn cần typename trước myarray<N>::Bitmap bởi vì nó là một loại phụ thuộc:

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

    template <int N> 
    typename myarray<N>::Bitmap myarray<N>::data[N]; 
// ^^^^^^^^ 
Các vấn đề liên quan