有人能解释一下为什么代码中的类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);
发布于 2011-12-05 01:54:37
在本例中,因为您没有定义Bank
类,所以TaxWay
类不能保存银行的副本。至少必须知道Bank
类的大小,这样才能分配空间。
另一方面,根据Bank
包含的内容,复制它可能不是一个好主意。这也会复制银行里的钱吗?:-)
发布于 2011-12-05 01:54:21
重要的两点:
Bank bank
,则必须包括具有类Bank
定义的头文件。正如您所做的那样,只要向前声明就会导致编译error.Bank & bank
或Bank *bank
,那么向前声明就足够了。在这种情况下,除非您想访问Bank
的任何成员(例如,在类TaxWay
).的某些成员函数的内联定义中),否则不需要Bank
的定义
发布于 2011-12-05 01:54:23
有一件事(这可能是你的问题,也可能不是你的问题)是你将Bank
声明为一个没有定义的转发声明。当编译器到达TaxWay
时,您将无法声明Bank
类型的成员变量,因为编译器还不知道有关Bank
类的任何信息。
https://stackoverflow.com/questions/8377290
复制相似问题