gpt4 book ai didi

c++ - 在另一个类中创建对象(无继承)

转载 作者:行者123 更新时间:2023-11-28 03:04:43 25 4
gpt4 key购买 nike

大家好=) 问题:编译器无法执行类 op 的构造函数,因为类 person 中没有默认构造函数。错误文本:'person' : 没有合适的默认构造函数可用

问题是:如何在不创建默认构造函数和不继承的情况下解决这个问题。这是类(class)人员的代码:

  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()
{
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;
}
}

最佳答案

op 类包含 10 个 person 实例。要构建操作,您必须构建 10 个实例。

当您在 oper::oper 的构造函数中时,您是在构造类及其内容之后。由于没有 person 的默认构造函数,因此编译器无法构建 oper。

  • 为什么不允许使用默认构造函数?

  • 为什么要创建一个固定的 10 人数组,然后支持一个名为 add_person 的函数?人数是固定的还是动态的?

    如果您使用的是 C++03/C++11,则可以在构造期间使用初始化列表将值传递给 person 的 Ctor。但它不会是一段漂亮的代码。

    oper::oper()
    : b({""},{""} .... ), mid_tax1(0), mid_tax2(0)
    {
    ...
    }

    正确的解决方案是添加默认构造函数或从 10 人的固定数组移动到 N 人的动态容器

  • 关于c++ - 在另一个类中创建对象(无继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20024095/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com