2011-01-06 74 views
2

在下面,不應該由基於派生類構造函數參數類型的編譯器生成基類構造函數嗎?基類模板實例化取決於派生類構造函數參數類型

template <class T> 
class foo 
{ 
int a; 
public: 
    foo(T a){} 
    // When I convert the constructor to a function template, it works fine. 
    // template <typename T> foo(T a){} 
}; 

class bar : public foo<class T> 
{ 
public: 
    bar(int a):foo(a){} 
}; 

int main(void) 
{ 
    bar obj(10); 
    system("pause"); 
    return 0; 
} 

錯誤C2664: '富::富(T)':無法從 '詮釋' 轉換參數1 'T'

我理解錯誤,但爲什麼會這樣?

回答

5

class bar : public foo<class T>中的語法不正確。

  • 無論bar依賴於一個模板參數Tbar應該是一個模板:

    template<class T> 
    class bar : public foo<T> 
    { 
    public: 
        bar(int a):foo(a){} 
    }; 
    
    
    int main() 
    { 
        bar<int> obj(10); 
    } 
    
  • 或者你想bar從一個特定的實例繼承foo如:

    class bar : public foo<int> 
    { 
    public: 
        bar(int a):foo(a){} 
    }; 
    
    
    int main() 
    { 
        bar obj(10); 
    } 
    
+0

從f在'foo '中寫入第一個代碼`T`,說`bar`模板參數也是`foo`模板參數。我對麼 ? – Mahesh 2011-01-06 20:59:37

相關問題