2015-12-02 166 views
1

考慮不能爲模板類模板函數匹配函數聲明

template<class Y> struct foo 
{ 
    template <class ForwardIt> 
    foo(ForwardIt first, ForwardIt last); 
}; 

爲了實現構造函數中,我已經寫了

template<class Y, class ForwardIt> foo(ForwardIt first, ForwardIt last) 
{ 
    // ToDo - code here 
} 

但是,這將產生一個編譯錯誤,大意是它無法將該定義與聲明進行匹配。

我在做什麼錯?我正在使用C++ 11編譯器。

回答

5

你的代碼有兩個問題。首先,你在類的主體之外的函數定義中遺漏了類的名字,這基本上意味着你聲明瞭一個獨立的函數,它與類或其成員函數無關(在這種情況下,它是非法的因爲你的函數沒有返回類型,因此不能成爲獨立函數)。

其次,您必須爲您的類模板參數和成員函數模板參數使用不同的template聲明。

您需要:

template<class Y> 
template<class ForwardIt> 
foo<Y>::foo(ForwardIt first, ForwardIt last) 
{ 
    // ToDo - code here 
} 
1
template<class Y> 
template<class ForwardIt> 
foo<Y>::foo(ForwardIt first, ForwardIt last) 
{ 
} 

是定義這個的正確方法。