【发布时间】:2017-10-27 21:49:23
【问题描述】:
我的主文件出现error: 'heir' is not a member of 'Heir' 和'heir' is not a member of 'Estate' 错误。我正在尝试使用getEstateValue() 和getHeirValue() 方法来显示继承人和遗产的总价值。是否可以使用Estate heir = new Heir(2000,3000) 访问这两种方法。我有继承自 Estate 类的 Heir 类。感谢您的帮助
下面是代码:
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
class Estate{
protected:
double estateValue;
public:
Estate(double estateValue){
this->estateValue = estateValue;
}
virtual double totalEstateValue(){
return estateValue;
}
double getEstateValue(){
return estateValue;
}
};
class Heir:public Estate{
protected:
double heirValue;
public:
Heir(double heirValue, double estateValue):Estate(estateValue){
this->heirValue = heirValue;
}
double totalEstateValue(){
return heirValue+=Estate::estateValue;
}
double getHeirValue(){
return heirValue;
}
};
int main(){
Estate* heir = new Heir(2000, 3000);
//how do i access the methods in heir class? is it heir->getHeirValue?
//how do i access the methods in the estate class? is it heir->getEstateValue?
//here is where I am getting the error
cout << "Heir value is: " << Heir::heir->getHeirValue() << endl;
cout << "Estate value is: " << Heir::heir->getEstateValue() << endl;
//here is where I am getting the error
cout << "Total value is: " << heir->totalEstateValue() << endl;
delete heir;
heir = nullptr;
return 0;
}
【问题讨论】:
-
您正在通过
Estate*呼叫getHeirValue。Estate类没有该名称的功能。正确的答案取决于当有人这样做时您希望发生什么——我们不知道。 (你的意思是Heir *heir?) -
也许我对继承感到困惑。是否可以使用我当前的代码调用继承人
getHeirValue()中的方法,并使用我的对象Estate heir = new Heir(2000,3000)调用方法getEstateValue -
由于
heir是Estate*类型,它可以指向Estate类型的对象。但随后你调用了一个函数,getEstateValue,在它上面调用Estate类型的对象是不合法的。那么在这种情况下你希望发生什么?如果您的答案是这种情况在代码中是不可能的,请将heir更改为Heir*而不是Estate*类型,以明确它必须指向Heir而不是Estate。但只要你想让它成为可能,你就必须以某种方式实现它。
标签: c++ pointers inheritance