有人可以解释一下,为什么代码中的TaxWay类不可能保存由引用初始化的成员变量Bank?我应该在代码中更改什么才能使其正确?
当我将成员变量更改为引用Bank&
时,它可以正常工作。我认为同样的情况应该发生在“非参考变量”上。怎么做到呢?
class Bank;
class TaxWay : public Way
{
public:
TaxSquare(int, int, Bank&);
virtual void process();
private:
int taxAmount;
Bank bank;
};
TaxWay::TaxWay(int anID, int amount, Bank& theBank)
: Way(anID),taxAmount(amount),bank(theBank)
{
}
我创建了一个对象:
TaxWay TaxWay9(9,150, theBank);
答案 0 :(得分:6)
两个要点:
如果要将成员变量声明为Bank bank
,则必须包含具有类Bank
定义的头文件。正如您所做的那样,只需转发声明就会导致编译错误。
但是,如果要将其声明为Bank & bank
或Bank *bank
,则前向声明就足够了。在这种情况下,不需要类Bank
的定义,除非您要访问Bank
的任何成员(例如,在类TaxWay
的某些成员函数的内联定义中)。
答案 1 :(得分:3)
有一件事(可能或可能不是你的问题)是你已将Bank
声明为没有定义的前向声明。当编译器到达TaxWay
时,您将无法声明类型Bank
的成员变量,因为编译器还不知道有关类Bank
的任何信息。
答案 2 :(得分:2)
在示例中,TaxWay
类无法保存银行副本,因为您尚未定义Bank
类。至少必须知道Bank
类的大小,以便分配空间。
另一方面,根据Bank
包含的内容,复制它可能不是一个好主意。那还会把钱存入银行吗? : - )