2015-11-19 9 views
6

मैं एक एसटीडी स्वीकार करने के लिए कोशिश कर रहा हूँ :: इसलिए जैसा कोई सामान्य निर्माता में initializer_list:std :: दृश्य स्टूडियो में initializer_list अस्पष्टता

template<typename T> 
class Test{ 
    std::vector<T> V; 

    Test(std::initializer_list<T>& list) : V(list){} 

}; 

Test<int> test{ 1, 2, 3, 4 }; 

का उपयोग कर लेकिन मैं त्रुटि मिलती है:

error C2440: 'initializing' : cannot convert from 'initializer-list' to 'Test<int>' No constructor could take the source type, or constructor overload resolution was ambiguous 

मुझे यकीन नहीं है कि मैं यहां क्या कर रहा हूं।

+3

वीएस परिपक्व, अच्छा प्रतीत होता है। अब यह अस्थायी लोगों को बाध्यकारी 'और' की अनुमति नहीं देता है। –

+0

स्नैकी, लेकिन मैं इसे ले जाऊंगा। धन्यवाद। –

उत्तर

4
Test(std::initializer_list<T>& list) : V(list){} 

इस गैर स्थिरांक संदर्भ द्वारा std::initializer_list लेता है, लेकिन आप तो तुम सिर्फ मूल्य से यह पारित कर सकते हैं, यह करने के लिए एक अस्थायी है, जो अवैध

std::initializer_list हल्के होने के लिए डिज़ाइन किया गया है के लिए बाध्य करने की कोशिश :

Test(std::initializer_list<T> list) : V(list){} 
//       ^no & 
संबंधित मुद्दे