के लिए एंबिकिट ओवरलोड लोड करें क्या कोई कृपया मेक_निक के लिए महत्वाकांक्षी ओवरलोड चेतावनी को हल करने का तरीका बता सकता है, जहां त्रुटि आती है और इसका क्या अर्थ है (मुझे समझ में आता है कि एक असाधारण अधिभार क्या है लेकिन मुझे यकीन नहीं है कि मुझे इस विशेष कोड के लिए क्यों मिलता है)? मैं C++ 11 का उपयोग कर रहा हूं, इसलिए मैं हर्ब सटर से अनुशंसित टेम्पलेट का उपयोग करता हूं।सी ++ 11/14 make_unique std :: स्ट्रिंग
इसका इस्तेमाल करते हुए मैं निम्नलिखित त्रुटि मिलती है:
Error 4 error C2668: 'make_unique' : ambiguous call to overloaded function
और विजुअल स्टूडियो 13 में टूलटिप से अधिक मंडराना मुझे देता है तरीकों के लिए निम्न:
function template "std::enable_if<!std::is_array<_Ty>::value, std::unique_ptr<_Ty,std::default_delete<_Ty>>>::type std::make_unique<_Ty,_Types...>(_Types &&..._Args)"
function template "std::unique_ptr<T, std::default_delete<T>> make_unique<T,Args...>(Args...)
argument types are: std::string
दूसरा एक एक बुलाया जाना चाहिए make_unique टेम्पलेट से
/* Will be part of c++14 and is just an oversight in c++11
* From: http://herbsutter.com/gotw/_102/
*/
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique(Args&& ...args){
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
निर्माता को अग्रेषित करने के लिए:
Shader(const std::string& name);
कोड त्रुटि
std::string _name = "Shader";
std::unique_ptr<Shader> s = make_unique<Shader>(_name);
अच्छा पकड़। लेकिन शेष सवाल यह है कि वीएस उम्मीदवारों के रूप में क्यों देखता है। ओपी शायद 'नेमस्पेस std;' का उपयोग कर इस्तेमाल किया? ओपी को एक और चीज ठीक करनी चाहिए। –
यह मेरा पहला अनुमान था और मैंने नेमस्पेस std का उपयोग करने के लिए सभी फ़ाइलों को स्कैन किया है; अफसोस की बात यह समस्या नहीं है :( अब किसी भी नामस्थान के लिए नेमस्पेस का उपयोग नहीं किया जा रहा है, और मुझे नहीं पता कि वीएस सी ++ 14 विधि क्यों देखता है :) क्या मुझे कुछ याद आ रही है या क्या यह संभव है कि यह std संस्करण का उपयोग करे अभी तक नामस्थान का उपयोग नहीं कर रहा है? मुझे पूरा यकीन है कि उत्तर स्वयं सही है, लेकिन जब तक कोई व्यक्ति पाता है या बताता है कि सी ++ 14 विधि का उपयोग क्यों किया जाता है, तब तक मैं अनुमोदन की प्रतीक्षा करता हूं। – NoxMortem
ठीक है, उत्तर निश्चित रूप से सही है :: make_unique (_name) इसे हल करता है। अभी भी अतिरिक्त सवाल है कि वीएस नामस्थान के बिना सी ++ 14 विधि क्यों देखता है। एक और सवाल, यदि मैं बस सी ++ 14 विधियों का उपयोग करता हूं, तो क्या ऐसी कुछ चीजें हैं जिनके बारे में मुझे अवगत होना चाहिए, इसके लिए परियोजना को बनाने के लिए स्पष्ट रूप से एक सी ++ 14 सक्षम कंपाइलर की आवश्यकता है? –
NoxMortem