2011-04-01 15 views
5

मैं सी ++ टेम्पलेट के साथ एक अजीब समस्या है और मुझे समझ नहीं आता क्यों निम्नलिखित कोड काम नहीं कर रहा:नेस्टेड टेम्पलेट्स

#include <iostream> 

template <typename A, typename B> 
class TypePair { 
public: 
    typedef A First; 
    typedef B Second; 
}; 


template <typename P> 
class Foo { 
    public: 
     Foo(P::First f, P::Second) { 
      std::cout 
       << "first = " << f << std::endl 
       << "second = " << s << std::endl; 
     } 
}; 


int main(int argc, char **argv) { 
    Foo<TypePair<int, double> > foo(42, 23.0); 

    return 0; 
} 

कोड निम्न त्रुटियों का उत्पादन:

$ g++ templates.cpp -o templates 
templates.cpp:14: error: expected ‘)’ before ‘f’ 
templates.cpp: In function ‘int main(int, char**)’: 
templates.cpp:23: error: no matching function for call to ‘Foo<TypePair<int, double> >::Foo(int, double)’ 
templates.cpp:12: note: candidates are: Foo<TypePair<int, double> >::Foo() 
templates.cpp:12: note:     Foo<TypePair<int, double> >::Foo(const Foo<TypePair<int, double> >&) 

मेरे लिए यह कोड पूरी तरह से ठीक दिखता है, लेकिन जी ++ स्पष्ट रूप से अपनी राय है ^^ कोई विचार?

सेबस्टियन

उत्तर

15

उपयोग

Foo(typename P::First f, typename P::Second s) 

के बाद से पी टेम्पलेट पैरामीटर, पी :: सबसे पहले और पी :: दूसरा निर्भर नाम, कर रहे हैं ताकि आप स्पष्ट रूप से निर्दिष्ट करने के लिए वे typenames कर रहे हैं, नहीं, के लिए है उदाहरण, स्थिर डेटा सदस्य। विवरण के लिए See this

+0

आपके त्वरित उत्तर के लिए बहुत बहुत धन्यवाद! यह पूरी तरह से मेरी समस्या हल हो गया। एक अच्छा लिंक के लिए – Sebastian

+0

+1, धन्यवाद। –

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