Help

Can anyone explain why I get a compile error?
What do I need to change to make it work?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
class B { int val;
public:
    B(int v):val(v){}
    int getV() const{return val;} bool operator < (const B & v) const {return val<v.val;}};
    ostream & operator <<(ostream & out, const B & v) { out<<v.getV(); return out;}

    template<class T > struct Out {
        ostream & out;
        Out(ostream & o): out(o){}
        void operator() (const T & val) { out<<val<<" ";}};
  
    
int main(){

    B t1[]={3,2,4,1,5};
    B t2[]={6,10,8,7,9};
    vector<B> v1(10);
    sort(t1, t1+5);
    sort(t2, t2+5);
    merge(t1,t1+5,t2,t2+5,v1.begin());
    for_each(v1.begin(),v1.end(),Out<B>(cout));cout<<endl;
    return 0;

}
It would be nice if you can tell us exactly what the error is.
class B is missing a default constructor, which is required at line 22, which does
vector<B> v1(10);
of course you shouldn't provide the default constructor unnecessarily. Looks like you're using that vector for output, so just create it empty and use back_inserter(v1) in merge().
Topic archived. No new replies allowed.