问题: 在使用STL容器盛放自定义数据类型时,会报错:没有合适的默认构造函数可用?????
例子:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
class person
{
public:
person(string name,int age)
{
this->m_name = name;
this->m_age = age;
}
string m_name;
int m_age;
};
class mycopmera
{
public:
bool operator()(const person &p1, const person &p2)
{
return p1.m_age < p2.m_age;
}
};
void fun()
{
person p1("a", 12);
person p2("b", 13);
person p3("d", 15);
person p4("h", 19);
person p5("c", 14);
person p6("e", 16);
person p7("f", 17);
person p8("g", 18);
vector<person> va;
va.push_back(p1);
va.push_back(p2);
va.push_back(p3);
va.push_back(p4);
vector<person> vb;
vb.push_back(p5);
vb.push_back(p6);
vb.push_back(p7);
vb.push_back(p8);
vector<person> vc;
vc.resize(va.size() + vb.size());
merge(va.begin(), va.end(), vb.begin(), vb.end(), vc.begin(), mycopmera());
for (vector<person>::iterator it=vc.begin();it!=vc.end();it++)
{
cout << (*it).m_name << " " << (*it).m_age << endl;
}
}
int main()
{
fun();
return 0;
}
原因: vc.resize(va.size() + vb.size());在执行这条语句时会调用自定义类的默认构造函数,由于我们自己定义了有参的构造函数,系统就不会再调用默认构造函数,所以在执行这条语句时就会报错,
解决方法: 在public下写入默认构造函数,让其空实现即可。即==添加person() {};==就可以了
默认构造函数就是没有参数的构造函数。