2012-09-07 47 views
11

Tôi gặp sự cố với mẫu lớp. Tôi muốn các dữ liệu cá nhân trong một lớp học để trở thành một vector của vector của một số loại kiểu số, ví dụ:Mẫu lớp C++ là mẫu: đối số mẫu không hợp lệ

std::vector<std::vector<double> > 
std::vector<std::vector<std::complex<double> > > 

Nhưng tôi muốn loại vector (Tôi đang sử dụng một thư viện các vectơ của bên thứ ba cùng với stl vectơ) và loại phần tử được tạo mẫu. Tôi đã thử mẫu template nhưng bây giờ tôi không nghĩ đó là giải pháp cho vấn đề của tôi. Một ví dụ đơn giản hóa cao là:

#include <complex> 
#include <vector> 
template<typename T> 
class Fred { 
    std::vector<T> data_; 
}; 
int main(){ 
    Fred<std::vector<double> > works; 
    //Fred<std::vector<std::complex<double> > doesnt_work; 
    return 0; 
} 

Như đã trình bày nó biên dịch tốt, nhưng nếu tôi bỏ ghi chú dòng thứ hai trong chính, tôi nhận được lỗi (g ++ 4.6):

error: template argument 1 is invalid 

Tại sao tôi có được điều này lỗi? Và có ai có sửa chữa được đề xuất không? Cảm ơn!

+20

Đếm '<' s và '>' s trong dòng không hoạt động. Có một mất tích ... –

+3

Đó là một thông báo lỗi thực sự kém, hoàn toàn gây hiểu lầm. –

+0

@PeteBecker: Xấu hổ. Tôi đã sẵn sàng để đào lên [template rebinder] (http://stackoverflow.com/a/11723847/596781). –

Trả lời

16
#include <complex> 
#include <vector> 
template<typename T> 
class Fred { 
    std::vector<T> data_; 
}; 

int main(){ 
    //Fred<std::vector<double> > works; 
    Fred<std::vector<std::complex<double> > > doesnt_work; 
    return 0; 
} 

Hoạt động tốt. Bạn bỏ lỡ số thứ ba > trong khai báo doesnt_work.

+3

Cảm ơn! Bây giờ tôi cảm thấy thực sự ngu ngốc! – jtravs

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