2012-09-07 25 views
11

मुझे कक्षा टेम्पलेट के साथ कोई समस्या है। मैं यानी सांख्यिक प्रकार के कुछ प्रकार की वैक्टर का एक वेक्टर, होना करने के लिए एक कक्षा में निजी डेटा हैं:सी ++ वर्ग टेम्पलेट एक टेम्पलेट है: टेम्पलेट तर्क अमान्य है

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

लेकिन मैं के साथ (मैं तीसरे पक्ष वैक्टर का एक पुस्तकालय का उपयोग कर रहा वेक्टर के प्रकार चाहते हैं एसटीएल वैक्टर), और तत्व प्रकार टेम्पलेट किया जाना चाहिए। मैंने टेम्पलेट टेम्पलेट्स की कोशिश की लेकिन अब मुझे नहीं लगता कि यह मेरी समस्या का समाधान है। एक अत्यधिक सरल उदाहरण है:

#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; 
} 

दिखाया गया है यह ठीक संकलित, लेकिन अगर मैं मुख्य में दूसरी पंक्ति uncomment, मैं त्रुटि (छ ++ 4.6) मिलती है:

error: template argument 1 is invalid 

क्यों मैं इस मिलता है त्रुटि? और क्या किसी ने सुझाव दिया है? धन्यवाद!

+20

उस पंक्ति में '<' s और '>' की गणना करें जो काम नहीं करता है। एक गायब है ... –

+3

यह वास्तव में एक खराब त्रुटि संदेश है, पूरी तरह से भ्रामक है। –

+0

@PeteBecker: शर्म। मैं अपने [टेम्पलेट रिबाइंडर] को खोदने के लिए तैयार हो रहा था (http://stackoverflow.com/a/11723847/596781)। –

उत्तर

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; 
} 

अच्छी तरह से काम करता है। doesnt_work की घोषणा में आप तीसरे > को याद करते हैं।

+3

धन्यवाद! अब मैं वास्तव में बेवकूफ महसूस करता हूँ! – jtravs

संबंधित मुद्दे