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