2011-12-04 39 views
0

有人可以解释为什么代码中类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

你从编译器得到什么错误?你能显示导致这个错误的*实际*代码吗? –

+0

我试图编译这个,但修复了三条错误消息之后,我放弃了。如果您希望我们帮助您,您必须做得更好! – TonyK

+0

它只是一段代码,而不是整个代码。我认为这足以表达我的问题。 – arjacsoh

回答

2

在该示例中,TaxWay类无法保存银行副本,因为您尚未定义Bank类。至少必须知道Bank类的大小,以便分配空间。

另一方面,根据Bank包含的内容,复制它可能不是一个好主意。那还会把钱存在银行里吗? :-)

+0

如果我明白了,建议使用引用作为成员变量。这就是我想要做的。 taxWay还需要修改银行的资金。我只有这个问题,为什么不编写其他方式。不管怎么说,还是要谢谢你。 – arjacsoh

6

两个要点:

  • 如果你想成员变量声明为Bank bank,那么你必须包含头文件它具有类别Bank的定义。正如你所做的那样,只是前向声明会导致编译错误。

  • 但是,如果要声明它为Bank & bankBank *bank,则前向声明就足够了。在这种情况下,不需要类Bank的定义,除非您想访问Bank的任何成员(例如,在TaxWay类的某些成员函数的内联定义中)。

3

有一件事(可能会也可能不是你的问题)是,你宣称Bank作为未定义的前向声明。当编译器到达TaxWay时,您将无法声明类型为Bank的成员变量,因为编译器还不知道类Bank的任何内容。