2012-01-20 52 views
0

我無法解決C++模板繼承相關代碼中的錯誤。模板和繼承:「無法轉換」在初始化

template <class row> 

struct tableBase 
{ 
    typedef row pkeytype; 

    int k; 
}; 


template <typename row> 
struct table:tableBase<typename row::pkeytype> 
{ 
    row r; 
}; 


struct astruct { 

    typedef int pkeytype; 
    char y; 
}; 



table<astruct> atable; 

tableBase<astruct> * u=&atable; 

錯誤:無法初始化

+0

'表 *'是可轉換到雖然'tableBase *'。 –

+0

@MooingDuck:結構具有公共繼承 –

回答

3

這是因爲table<astruct>父是tableBase<int>tableBase<astruct>這是兩個完全不相關的類型轉換table<astruct>*tableBase<astruct>*

不幸的是,由於我不能推測你在這裏試圖完成什麼,我不能提供任何建議的解決方案。

+0

其實我試圖用stl來模擬sqltable並陷入其間。就像這樣:'table3 > players; table2 >得分(球員);' – user602592

0

變化

tableBase<astruct> * u=&atable; 

tableBase<astruct::pkeytype> * u=&atable; 

(注意,在你的代碼中定義tableBase的模板參數與密鑰類型初始化)。

編輯:

我應該說明這會讓你的代碼編譯。使得它的工作是另一回事,P

0

的類型是不一樣的

table<astruct> atable; // This inherits from tableBase<astruct::pkeytype> 


// The template type is astruct not astruct::pkeytype 
tableBase<astruct> * u=&atable;