2011-10-19 28 views
5

मैं निम्नलिखित सरल परिदृश्य है:सिंटेक्स त्रुटि

1>test.cpp(16): error C2059: syntax error : ')' 
1>   test.cpp(23) : see reference to class template instantiation A<T>' being compiled 

:

template< typename T> 
struct A 
{ 
    A() : action_([&](const T& t) { }) 
    {} 

private: 
    boost::function< void(const T&)> action_; 
}; 

जब विजुअल C++ 2010 संकलन, यह मेरे action_ के निर्माण में एक सिंटैक्स त्रुटि देता है अजीब बात यह है कि एक ही उदाहरण, टेम्पलेट पैरामीटर के साथ, बस ठीक है:

struct A 
{ 
    A() : action_([&](const int& t) { }) 
    {} 

private: 
    boost::function< void(const int&)> action_; 
}; 

मुझे पता है कि इस समस्या के लिए एक वैकल्पिक हल निर्माता शरीर में action_ प्रारंभ स्थानांतरित करने के लिए, प्रारंभ सूची के बजाय, नीचे दिए गए कोड में की तरह है:

template< typename T> 
struct A 
{ 
    A() 
    { 
    action_ = [&](const T& t) { }; 
    } 

private: 
    boost::function< void(const T&)> action_; 
}; 

... लेकिन मैं इस तरह के वैकल्पिक हल बचना चाहते हैं।

क्या किसी को ऐसी स्थिति का सामना करना पड़ा? क्या इस तथाकथित वाक्यविन्यास त्रुटि के लिए कोई स्पष्टीकरण/समाधान है?

+0

एफडब्ल्यूआईडब्ल्यू, प्रदान किया गया उदाहरण (लापता '# शामिल' को ठीक करने के बाद) जी ++ 4.6.1 के साथ चेतावनी के बिना संकलित करता है। –

+0

यह विज़ुअल सी ++ 2010 के लिए विशिष्ट है। –

उत्तर

1

विजुअल सी ++ 2010 में लैम्ब्डा का टूटा कार्यान्वयन? स्पष्टीकरण के लिए यह मेरा सबसे अच्छा अनुमान है।

हालांकि, मैं इस बात से चिंतित हूं कि इस सबमिशन में संदर्भ द्वारा कैप्चरिंग स्कोप चर क्या है ... कुछ भी नहीं?

+0

समस्या को समझने के लिए यह एक सरल कोड है। वास्तविक मामले में, मुझे कुछ डेटा सदस्यों तक पहुंचने के लिए स्कोप कैप्चर करने की आवश्यकता है (घोषित, इसलिए action_ सदस्य से पहले प्रारंभ किया गया)। मुझे लैम्बडास के खराब कार्यान्वयन पर भी संदेह है ... –

+0

'[&] 'इस' को कैप्चर करेगा, और इसका मतलब है, सभी सदस्य चर (स्वयं सहित)। – spraff

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