2013-07-24 7 views
5

के इनटाइलाइजेशन के लिए कोई मिलान करने वाला कन्स्ट्रक्टर, त्रुटि क्यों, osteam_iterator एक टेम्पलेट वर्ग है, क्यों 'ostream_iterator' के initalization के लिए कोई मिलान करने वाला कन्स्ट्रक्टर नहीं है, कृपया एक सहायता दें, धन्यवाद। ostream_iterator टेम्पलेट> वर्ग _LIBCPP_VISIBLE ostream_iterator परिभाषितकोड के लिए 'ostream_iterator <int>'

int main(int argc, const char * argv[]) 
{ 
    vector<int> sentence1; 
    sentence1.reserve(5);// 设置每次分配内存的大小 

    sentence1.push_back(1); 
    sentence1.push_back(2); 
    sentence1.push_back(3); 
    sentence1.push_back(4); 
    sentence1.push_back(5); 

    int c = 5; 

    copy(sentence1.begin(), sentence1.end(), ostream_iterator<int>(cout, 1)); 
    cout << endl; 
+0

http://en.cppreference.com/w/cpp/iterator/ostream_iterator/ostream_iterator –

+0

इसका क्या अर्थ है, यह लिंक वर्तमान पृष्ठ है। –

+0

ओह, मैंने अभी तय किया है;) –

उत्तर

0

ostream_iterator वर्ग ऐसा दिखता है:

template< class T, 
    class CharT = char, 
    class Traits = std::char_traits<charT>> 
class ostream_iterator /*...*/ 

जबकि संबंधित निर्माता के रूप में घोषित किया जाता है: के बाद से एक ostream_iterator के दूसरे टेम्पलेट तर्क चरित्र प्रकार का होना आवश्यक है

ostream_iterator(ostream_type& buffer, const CharT* delim) 

आप इसे int के साथ बस प्रतिस्थापित नहीं कर सकता।

आप दूसरे टेम्पलेट पैरामीटर ommit यदि आप एक स्ट्रिंग प्रकार char const * का शाब्दिक में प्लग कर सकते हैं:

std::copy(sentence1.begin(), sentence1.end(), std::ostream_iterator<int>(cout, ",")); 

तो सी ++ 11 तो

int c = 5; 
for (auto v : sentence1) std::cout << v << c; 

आप के लिए उपलब्ध है का एक और तरीका है जो भी आप लायक हैं वह कर रहे हैं और यह भी उपयुक्त हो सकता है। लाभ यह है कि operator<< प्रकार "पॉइंटर टू चार टाइप" के तर्क से अधिक लचीला है।

+0

मुझे व्यर्थ डाउनवॉटिंग पसंद नहीं है। – Pixelchemist

2

std::ostream_iterator निर्माता के लिए दूसरा पैरामीटर के रूप में एक स्ट्रिंग लेता है। यह स्ट्रिंग है जो अनुक्रम में प्रत्येक पूर्णांक के बाद आउटपुट होगी।

5

ostream_iterator निर्माता दूसरा पैरामीटर के रूप में const CharT* delim लेता है:

ostream_iterator (ostream_type & धारा, स्थिरांक चार्ट * परिसीमक) (1)

ostream_iterator (ostream_type & धारा) (2)

अपना कोड काम करने के लिए, आपको एक स्ट्रिंग में पास करने की आवश्यकता है:

std::copy(sentence1.begin(), sentence1.end(), std::ostream_iterator<int>(cout, "1")); 
//                    ^^^^ 
+0

धन्यवाद, हाँ, यह काम किया है। –

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