大家好=)问题:Compilier无法执行类oper的构造函数,因为类person中没有默认的构造函数。 错误的文字: 'person':没有合适的默认构造函数
问题是:如何在不创建默认构造函数和没有继承的情况下解决此问题。 这是班上人的代码:
class person:public gsm
{
public:
string name,tel;
int tax;
public:
person(string m);
person(string m,string t,string n,int a);
void input(string n, string t, int tx);
void output();
person& operator=(person& a);
bool operator==(person& a);
bool operator!=(person& a);
};
这是类操作符:
class oper
{
private:
person b[10];
int mid_tax1,mid_tax2;
public:
oper();
void set_t1(int tax);
void set_t2(int tax);
void count();
void add_person(person a,int i);
void out();
};
类oper的构造函数:
oper::oper()
{
this->mid_tax1=0;
this->mid_tax2=0;
for(int i=0;i<10;i++)
{
b[i].tel="";
b[i].name="";
b[i].tax=0;
}
}
答案 0 :(得分:1)
class oper包含10个人的实例。要构建oper,你必须构建10个实例。
当你在oper :: oper的构造函数中时,你就是在类之后并且构造了它的内容。由于没有人的默认构造函数,编译器无法构建操作。
如果您使用的是C ++ 03 / C ++ 11,则可以使用初始化程序列表在构造期间将值传递给人员的Ctor。但它不会是一段漂亮的代码。
oper::oper()
: b({""},{""} .... ), mid_tax1(0), mid_tax2(0)
{
...
}
正确的解决方案是添加默认构造函数或从固定的10人阵列移动到N人的动态容器
答案 1 :(得分:1)
使用std :: list而不是数组。