2012-01-25 11 views
5

वहाँ एक संरचना आंतरिक संरचना टिन युक्त टाउट है:सी ++ पैरामीटर के रूप में आंतरिक संरचना पारित

template <typename T> 
struct TOut 
{ 
    struct TIn 
    { 
      bool b; 
    }; 

    TIn in; 
T t; 
}; 

कैसे सही ढंग से में टिन पारित करने के लिए कुछ विधि का औपचारिक पैरामीटर के रूप में?

Error 4 error C2998: 'int test' : cannot be a template definition 
+0

http://stackoverflow.com/questions/7178948/problem-with-functions-accepting-inner-classes-of-template-classes – Lol4t0

+0

@TJD 'टिन 'ज्ञात (" ठोस ") प्रकार होगा यदि यह जहां 'टाउट 'के बगल में घोषित किया गया था, या एक गैर-टेम्पलेट वर्ग के अंदर। उस बिंदु पर जहां ओपी को कोई त्रुटि मिल रही है, 'टिन' अभी तक ज्ञात नहीं है, क्योंकि 'TOUT ' अभी तक तत्काल नहीं है। बीटीडब्ल्यू, शब्द "कंक्रीट" आमतौर पर विरासत के संदर्भ में उपयोग किया जाता है ("अमूर्त" के विपरीत)। –

उत्तर

7

आप typename कीवर्ड का उपयोग करने की आवश्यकता है:

class Test 
{ 
public: 
    template <typename T> 
    static void test (const TOut<T>::TIn &i) {} //Error 
}; 


int main() 
{ 
TOut <double> o; 
Test::test(o.in); 
} 

कार्यक्रम निम्न त्रुटि के साथ संकलित

template <typename T> 
static void test (const typename TOut<T>::TIn &i) {} 

देखें Where and why do I have to put the "template" and "typename" keywords?

2

आप सरल

क्यों उपयोग नहीं कर सकते
template <typename T> 
static void test (const T& i) 

इसके बजाय?