[英]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 & bank
或Bank *bank
,則遠期聲明就足夠了。 在這種情況下,不需要定義Bank
類,除非您要訪問Bank
任何成員(例如,對TaxWay
類的某些成員函數的內聯定義)。
一件事(可能是或可能不是您的問題)是您已將Bank
聲明為無定義的前瞻性聲明。 當編譯器到達TaxWay
,您將無法聲明類型為Bank
的成員變量,因為編譯器尚不了解Bank
類。
在該示例中, TaxWay
類無法保存銀行的副本,因為您尚未定義Bank
類。 至少必須知道Bank
類的大小,以便可以分配空間。
另一方面,根據Bank
內容,復制它可能不是一個好主意。 那還會復制銀行里的錢嗎? :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.