2016-02-24 18 views
1

我學習C++,並試圖實現橋接模式,遇到這種情況時,我有一個構造函數我實現文件:實現拷貝構造函數與橋模式C++

SystemImpl::SystemImpl() { 
    this->name = ""; 
    this->value = 0.0; 
    this->maxValue = DBL_MAX; 
} 

SystemImpl::SystemImpl(const SystemImpl& sys) { 
    this->name = sys.name; 
    this->value = sys.value; 
    this->maxValue = sys.maxValue; 
} 

而現在,我創建了接口使用此實現,其中小鬼是我的指針實現類:

System::System() { 
    imps = new SystemImpl(); 
} 

System::System(const System& sys) { 
    imps = new SystemImpl(sys); 
} 

最前一頁構造工作的很好,但第二,這是一個拷貝構造函數,顯示 沒有匹配函數調用到「冬ystemImpl :: SystemImpl(const系統&)'

怎麼了?

+0

SystemImpl是系統的執行情況,我用的是實施的接口,而不是反轉,我想 –

+3

這似乎是「只讀過錯誤消息」的情況下... – hyde

回答

3

對於imps = new SystemImpl(sys);,編譯器會抱怨SystemImpl沒有以System作爲參數的構造函數。

你可能想

System::System(const System& sys) { 
    imps = new SystemImpl(*sys.imps); 
} 
+0

謝謝!現在我懂了! –

+0

@DkRibeiro不客氣。 :d – songyuanyao