2012-08-17 39 views
5

giả sử tôi viết một lớp mẫu với một hàm tạo mẫu, như thế.Trình tạo mẫu trong lớp mẫu phải được định nghĩa trong định nghĩa lớp?

template<typename T> 
class X{ 


    template<typename S> 
    X(X<S> x){} 
}; 

biên dịch tốt. Tuy nhiên, khi tôi cố gắng để xác định các nhà xây dựng bên ngoài của việc kê khai mẫu, như thế này:

template<typename T> 
class X{ 


    template<typename S> 
    X(X<S> x); 
}; 


template<typename T, typename S> 
X<T>::X(X<S> y){} 

tôi nhận được lỗi sau:

error: invalid use of incomplete type ‘class X<T>’ 

tại sao? Không thể định nghĩa một hàm tạo mẫu của một lớp mẫu bên ngoài khai báo lớp?

Trả lời

10

Bạn có hai mức độ mẫu, và phải xác định chúng riêng rẽ.

template<typename T> 
template<typename S> 
X<T>::X(X<S> y){} 
5

Hãy thử điều này:

template<typename T> 
template<typename S> 
X<T>::X()(X<S> y) 
{ 
} 
4

lớp học của bạn có một tham số mẫu duy nhất, và bạn về cơ bản có một hàm mẫu bên trong của nó, vì vậy bạn cần

template<typename T> 
template <typename S> 
X<T>::X(X<S> y){} 
Các vấn đề liên quan