Шаблоны и наследование: «невозможно преобразовать» при инициализации - PullRequest
0 голосов
/ 20 января 2012

Я не могу устранить ошибку в коде, связанном с наследованием шаблонов 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 ]

4 голосов
/ 20 января 2012

Это потому, что родительский элемент table<astruct> равен tableBase<int> НЕ tableBase<astruct>, которые являются двумя совершенно не связанными типами.

К сожалению, так как я не могу предположить, что вы пытаетесь сделать здесь, я не могу предложить никаких предложенных решений.

0 голосов
/ 20 января 2012

типы не совпадают

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


// The template type is astruct not astruct::pkeytype
tableBase<astruct>  * u=&atable;
0 голосов
/ 20 января 2012

Изменение

tableBase<astruct>  * u=&atable;

до

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

(Обратите внимание, что параметр шаблона tableBase, определенный в вашем коде, инициализируется с типом ключа).

Edit:

Я должен заявить, что это сделает ваш код компилируемым. Заставить его работать - это другое дело; P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...