模板和继承:初始化中的“无法转换”

时间:2012-01-20 19:39:25

标签: c++ templates inheritance

我无法解决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;

错误:无法在初始化

中将table<astruct>*转换为tableBase<astruct>*

3 个答案:

答案 0 :(得分:4)

这是因为table<astruct>的父级是tableBase<int>tableBase<astruct>,这是两种完全不相关的类型。

不幸的是,由于我不能猜测你在这里想要完成什么,我无法提供任何建议的解决方案。

答案 1 :(得分:0)

更改

tableBase<astruct>  * u=&atable;

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

(请注意,使用密钥类型初始化了代码中定义的tableBase模板参数。)

编辑:

我应该声明这将使您的代码编译。让它发挥作用是另一回事; P

答案 2 :(得分:0)

类型不一样

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


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