类继承代码不起作用
class inheritance code not working
我已经检查了类继承语法,我确信我没有错?有什么东西从我身上溜走了吗?
class person
{
public:
int personid;
string personname;
string personadress;
person( int apersonid, string apersonname, string apersonadress )//constructor
{
personid=apersonid;
personname=apersonname;
personadress=apersonadress;
}
int getpersonid()
{
return personid;
}
string getpersonname()
{
return personname;
}
string getpersonadress()
{
return personadress;
}
};
class employee: public person
{
public:
int commission;
employee(int _commission, int apersonid, string apersonname, string apersonaddress) : person(apersonid, apersonname, apersonaddress)
{
commission= _commission;
}
int getcommission()
{
return commission;
}
};
我得到的错误是
错误1错误C2512:"person":没有合适的默认构造函数可用
我怀疑您的问题是基类没有定义默认构造函数(有0个参数)。相反,您有一个带有多个参数的构造函数。
person( int apersonid, string apersonname, string apersonadress )//constructor
{
personid=apersonid;
personname=apersonname;
personadress=apersonadress;
}
雇员类从person继承,但它的构造函数只接受一个参数,并且不使用它的构造函数初始化基类。
employee( int _commission )
{
commission= _commission;
}
这是一个问题,当你创建员工的实例时,它也试图调用person类构造函数。由于您没有默认构造函数(同样,没有参数),因此需要显式调用employee构造函数中的person构造函数。
你有两个选择。
首先,将person构造函数修改为不接受参数
person()
如果使用此方法,则不必更改员工类的签名。
或者,您可以修改员工构造函数以接受人员构造函数所期望的所有参数:
class employee: public person
{
public:
int commission;
employee(int _commision, int apersonid, string apersonname, string apersonadress ) : person(apersonId, apersonname, apersonadress)
{
commission = _commission;
}
int getcommission()
{
return commission;
}
};
在构造函数中,冒号(:)后面的代码是使用指定的参数(apersonid、apersonname、apersonadress)对person构造函数的调用。
employee构造函数然后分配_commission的值,因为它的作用域仅在employees类中相关。
这有道理吗?
在C++中,如果为类显式定义了构造函数,但它们都是非默认的,则编译器不会隐式定义默认构造函数,从而导致类没有默认构造函数的情况。您已经在类中定义了一个非默认构造函数,这个:
person( int apersonid, string apersonname, string apersonadress )
因此,您需要自己定义一个默认构造函数。例如
person() {}
请记住,在这种情况下,当您构造employee
类的对象时,将调用person
的默认构造函数。如果不需要,则需要在employee
的构造函数中调用person
的非默认构造函数。
相关文章:
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 为什么这段代码不起作用,我该如何解决?
- 为什么这些完全相似的代码不起作用?
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 代码在Visual Studio 2017中不起作用,但在VS代码中工作
- std::string == 运算符在代码中不起作用
- C++ 多态性在代码::块 17.12 中不起作用
- 为什么 pop_back() 在此代码中不起作用?
- 注释一行使代码工作,而没有它,代码不起作用
- C++ 程序在代码块 IDE 中不起作用
- 代码编译但不起作用!cmd窗口只是理想和理想,但什么也没发生
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 在 directx11 代码中更改全屏模式下的刷新率不起作用
- 为什么给定的代码不适用于所有测试用例?为什么当输入为 7786 时它不起作用?
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- C ++函数重新定义(代码不起作用 - 逻辑错误)
- 试图找到一个数字的平方根,但代码不起作用。C++