2011-08-07 40 views
21

Tôi đang gặp sự cố khi khai báo lớp mẫu. Tôi đã thử một số kết hợp không thể đọc được và không nhạy cảm.Lỗi 'X không phải là mẫu'

template <class C, class M > 
class BlockCipherGenerator : public KeyGenerator 
{ 
    ... 
    private: 
     M <C> m_cipher; 
}; 

template <class C, class M > 
class BlockCipherGenerator : public KeyGenerator 
{ 
    typedef typename C::value_type CIPHER; 
    typedef typename M::value_type MODE; 
    private: 
     MODE <CIPHER> m_cipher; 
}; 

Trả lời

37

Đó là những gì nó nói.

Danh sách thông số mẫu của bạn cho biết M is a class, not a template.

Nếu bạn nói rằng đó là một lớp mẫu, then everything's fine:

template <class C, template <class C> class M> 
class BlockCipherGenerator : public KeyGenerator 
{ 
     M<C> m_cipher; 
}; 

Hãy nhớ rằng, một cái gì đó giống như std::vectorkhông một lớp, nhưng một lớp mẫu. Một cái gì đó như std::vector<int> là một lớp (loại).

+0

Cảm ơn bạn rất nhiều! Tôi nghĩ rằng tôi thực sự đã có nó, nhưng tôi để lỗi trong tập tin CPP làm tôi phân tâm. – jww

+0

@noloader: Không sao cả. :) –

Các vấn đề liên quan