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?