所以我有幾個類正是如此定義:使用C++子類實例作爲默認參數?
class StatLogger {
public:
StatLogger();
~StatLogger();
bool open(<parameters>);
private:
<minutiae>
};
,使用它下降來實現空對象模式的子類(未開啓它自己的空對象)
class NullStatLogger : public StatLogger {
public:
NullStatLogger() : StatLogger() {}
};
然後,我有我想第三類有一個可選的記錄器實例在其構造函數:
class ThirdClass {
public:
ThirdClass(StatLogger& logger=NullStatLogger());
};
我的問題是,當我這樣做如上,我得到:
error: default argument for parameter of type ‘StatLogger&’ has type ‘NullStatLogger’
如果我把一個明確鑄造的定義,我得到:
error: no matching function for call to ‘StatLogger::StatLogger(NullStatLogger)
抱怨沒有從NullStatLogger構造函數,即使它的一個子類。我在這裏做錯了什麼,這是允許在C + +?
@luke:'NullStatLogger()'不是一個類型,而是一個類型爲'NullStatLogger'的值初始化右值。 – 2010-01-27 20:06:52
在使用Jerry接受的解決方案之前,請閱讀該答案的所有可用註釋以便討論提議的解決方案和其他替代方案的含義。 – 2010-01-28 08:08:45