引用为成员变量

时间:2011-12-04 17:48:58

标签: c++ reference member

有人可以解释一下,为什么代码中的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);

3 个答案:

答案 0 :(得分:6)

两个要点:

  • 如果要将成员变量声明为Bank bank,则必须包含具有类Bank定义的头文件。正如您所做的那样,只需转发声明就会导致编译错误。

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

答案 1 :(得分:3)

有一件事(可能或可能不是你的问题)是你已将Bank声明为没有定义的前向声明。当编译器到达TaxWay时,您将无法声明类型Bank的成员变量,因为编译器还不知道有关类Bank的任何信息。

答案 2 :(得分:2)

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

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