2015-10-27 61 views
1

希望這將是一個簡單的方法。在研究解決方案工作了不同的問題,我遇到了以下問題:在模板派生類中複製構造函數

template <class Base> 
class Derived : public Base 
{ 
public: 
    Derived() {}; 
    Derived(const Derived& rhs) : 
    Base::Base(rhs) { }; 
}; 

struct X { }; 

void test() 
{ 
    Derived<X> d1; 
    Derived<X> d2(d1); 
} 


test.cpp: In instantiation of ‘Derived<Base>::Derived(const Derived<Base>&) [with Base = X]’: 
test.cpp:34:19: required from here 
test.cpp:26:19: error: no type named ‘Base’ in ‘struct X’ 
     Base::Base(rhs) { }; 
       ^

那麼,如何一個寫衍生模板類的拷貝構造函數? (在上面的例子中,假設我沒有能力改變X和它的內容是平凡的,如有更改)

+3

它應該是'Base(rhs)',而不是'Base :: Base(rhs)' – lodo

回答

4

調用Derived你需要的所有Base部分的構造是

Derived(const Derived& rhs) : 
    Base(rhs) { }; 

Base::Base嘗試初始化名爲BaseBase類型的成員。

+0

解決了這個問題。 :)不得不等待六分鐘來選擇答案。 – KarenRei

+0

@KarenRei沒問題。樂意效勞。 – NathanOliver

+0

請注意'Base :: Base'表示'Base'的構造函數。關鍵在於,在寫下構造函數初始值設定項列表時,可以編寫類型,而不是構造函數。 – Brian

相關問題