簡體   English   中英

引用為成員變量

[英]Reference as member variable

有人可以解釋一下為什么代碼中的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);

兩個要點:

  • 如果要將成員變量聲明為Bank bank ,則必須包括具有類Bank定義的頭文件。 正如您所做的那樣,僅向前聲明會導致編譯錯誤。

  • 但是,如果要將其聲明為Bank & bankBank *bank ,則遠期聲明就足夠了。 在這種情況下,不需要定義Bank類,除非您要訪問Bank任何成員(例如,對TaxWay類的某些成員函數的內聯定義)。

一件事(可能是或可能不是您的問題)是您已將Bank聲明為無定義的前瞻性聲明。 當編譯器到達TaxWay ,您將無法聲明類型為Bank的成員變量,因為編譯器尚不了解Bank類。

在該示例中, TaxWay類無法保存銀行的副本,因為您尚未定義Bank類。 至少必須知道Bank類的大小,以便可以分配空間。

另一方面,根據Bank內容,復制它可能不是一個好主意。 那還會復制銀行里的錢嗎? :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM