मैं उपरोक्त कन्स्ट्रक्टर के साथ प्रकार फू प्रकार की ऑब्जेक्ट को कैसे चालू नहीं कर सकता?सी ++ टेम्पलेटेड कन्स्ट्रक्टर संकलित नहीं करेगा
मेरे पास एक कक्षा बार है जो एक आंतरिक टाइपिफ़ ("टेम्पलेट टाइपपीफ" के लिए कामकाज के रूप में) का उपयोग करता है और इसे नीचे (कंस 1) के रूप में एक कन्स्ट्रक्टर में उपयोग करने का इरादा रखता है। हालांकि, मुझे संकलन करने के लिए प्रतीत नहीं होता है। क्या यह कानूनी सी ++ है? CASE 2 का सुझाव है कि समस्या बार में टाइपपीफ से संबंधित है।
मैं एक कन्स्ट्रक्टर को कैसे परिभाषित कर सकता हूं जो बार में टाइप के साथ ऑब्जेक्ट्स के std :: vectors स्वीकार करेगा?
#include <vector>
#include <iostream>
#include <utility>
template <typename T>
struct Bar
{
typedef std::pair<T, T> type; // or anything else that uses T
};
struct Foo
{
Foo() {}
// CASE 1: doesn't compile
template <typename T> explicit Foo(const std::vector<typename Bar<T>::type>& data)
{
std::cout << "Hello\n";
}
//// CASE 2: compiles, but it's not what I want
//template <typename T> explicit Foo(const std::vector<Bar<T> >& data)
//{
// std::cout << "Hello\n";
//}
};
int main()
{
std::vector<Bar<int>::type> v; // for CASE 1
//std::vector<Bar<int> > v; // for CASE 2
Foo f(v);
return 0;
}
क्या आप त्रुटि आउटपुट पोस्ट कर सकते हैं? –
कुलपति ++ प्रतिलिपि निर्माता के साथ अपने निर्माता confuses और लिखते हैं: 'फू :: फू (स्थिरांक फू और)': 'स्थिरांक फू और' जीसीसी आउटपुट से 'std :: वेक्टर <_Ty>' से पैरामीटर 1 परिवर्तित नहीं कर सकते: 'Foo :: Foo (std :: vector> &)' –
kmhofmann
इंटेल सी ++ कंपाइलर कन्स्ट्रक्टर घोषणा के साथ लाइन पर निम्न, सहायक चेतावनी देता है: चेतावनी # 488 पर कॉल करने के लिए कोई मिलान करने वाला फ़ंक्शन नहीं : टेम्पलेट पैरामीटर "' T' "का उपयोग पैरामीटर टेम्पलेट के पैरामीटर प्रकारों को घोषित करने में नहीं किया जाता है" 'Foo :: Foo (const std :: vector :: प्रकार, std :: आवंटक :: प्रकार >> &)' " –