2013-07-24 36 views
5

cho mã, tại sao lỗi, osteam_iterator là một lớp mẫu, tại sao không có hàm tạo phù hợp để khởi tạo 'ostream_iterator', vui lòng trợ giúp, cảm ơn. xác định ostream_iterator template> lớp _LIBCPP_VISIBLE ostream_iteratorKhông có hàm tạo nào phù hợp cho việc initalization '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

có nghĩa là gì, liên kết này là trang hiện tại. –

+0

Rất tiếc, tôi đã sửa lỗi đó ngay bây giờ;) –

Trả lời

0

Định nghĩa lớp ostream_iterator trông giống như:

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

trong khi các nhà xây dựng tương ứng được khai báo là:

ostream_iterator(ostream_type& buffer, const CharT* delim) 

Kể từ khi mẫu số thứ hai của một ostream_iterator bắt buộc phải loại nhân vật bạn không thể thay thế nó bằng int.

Nếu bạn ommit tham số mẫu thứ hai bạn có thể cắm vào một chuỗi chữ kiểu char const *:

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

Nếu C++ 11 có sẵn cho bạn rồi

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

là một cách khác để làm những gì bạn xứng đáng và nó cũng có thể phù hợp. Lợi thế là, operator<< linh hoạt hơn đối số kiểu "con trỏ tới loại char".

+0

Tôi không thích downvoting vô nghĩa. – Pixelchemist

2

Các std::ostream_iterator mất một chuỗi như tham số thứ hai để các nhà xây dựng. Đây là chuỗi sẽ được xuất sau mỗi số nguyên trong chuỗi.

5

ostream_iterator constructor mất const CharT* delim như tham số thứ hai:

ostream_iterator (ostream_type & suối, const biểu đồ * dấu phân cách) (1)

ostream_iterator (ostream_type & dòng) (2)

Để làm cho mã của bạn hoạt động, bạn cần phải nhập một chuỗi:

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

cảm ơn bạn, vâng, nó đã hoạt động. –

Các vấn đề liên quan