怎么解决“=”:无法从“DoubleHeadNode<HeadType>*”转换为“DoubleChainNode<ElementType>*”

问题遇到的现象和发生背景

《数据结构》这门课实验报告要求做双向链表,但是我连双向链表都难以创建,我使用的是VS2019版本

问题相关代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#define STUDENT ElemnetType
#define Hdata HType

class STUDENT
{
public:
    char name[20];
    char num[10];
    char sex[3];
    int age;
    char place[30];
};

class Hdata
{
public:
    int l = 0;
};

template<typename ElementType>
class DoubleChainNode
{
public:
    STUDENT data;
    DoubleChainNode<ElementType>* prelink;
    DoubleChainNode<ElementType>* nextlink;
};

template<typename HeadType>
class DoubleHeadNode
{
public:
    HeadType Hdata;
    DoubleHeadNode<HeadType>* first;
};

template<typename HeadType,typename ElementType>
class DoubleChainList
{
public:
    DoubleChainList();
    ~DoubleChainList();
    bool InsertElementDoubleChainList(int k, ElementType& newvalue);
private:
    DoubleHeadNode<HeadType>* HeadPtr;
};

template<typename HeadType, typename ElementType>
DoubleChainList<HeadType, ElementType>::DoubleChainList()
{
    HeadPtr = new DoubleHeadNode<HeadType>;
    HeadPtr->first = NULL;
}

template<typename HeadType, typename ElementType>
DoubleChainList<HeadType, ElementType>::~DoubleChainList()
{
    DoubleChainNode<ElementType>* current;
    current = HeadPtr->first;
    while (HeadPtr->first)
    {
        current = current->nextlink;
        delete HeadPtr->first;
        HeadPtr->first = current;
    }
    delete HeadPtr;
}

template<typename HeadType, typename ElementType>
bool DoubleChainList<HeadType, ElementType>::
InsertElementDoubleChainList(int k, ElementType& newvalue)
{
    if (k < 0)
        return false;
    int index = 1;
    DoubleChainNode<ElementType>* current = HeadPtr->first;
    while (index < k && current);
    {
        current = current->nextlink;
        index++;
    }
    if (k > 0 && !current)
        return false;
    DoubleChainNode<ElementType>* q = new DoubleChainNode<ElementType>;
    if (k)
    {
        q->nextlink = current->nextlink;
        q->prelink = current;
        DoubleChainNode<ElementType>* p = current->nextlink;
        if (p)
        {
            p->prelink = q;
            current->nextlink = q;
        }
    }
    else
    {
        q->nextlink = HeadPtr->first;
        q->prelink = NULL;
        DoubleChainNode<ElementType>* p = HeadPtr->first;
        if (p)
        {
            p->prelink = q;
            HeadPtr->first = q;
        }
        return true;
    }
}

int main()
{
    ElemnetType newvalue;
    char name[][20] = { " ","Tom" ,"Amy"};
    char num[][10] = { " ","202101" ,"202102"};
    char sex[][3] = { " ","男" ,"女"};
    char place[][30] = { " ","England" ,"Amercia"};
    int age[] = {0,10,9};
    DoubleChainList<HType,ElemnetType> FirstList;
    for (int i = 2; i >= 1; i--)
    {
        strcpy(newvalue.name, name[i]);
        strcpy(newvalue.num, num[i]);
        strcpy(newvalue.sex, sex[i]);
        strcpy(newvalue.place, place[i]);
        newvalue.age = age[i];
        FirstList.InsertElementDoubleChainList(i, newvalue);
    }
    while (true)
    {
        cout << "双向链表创建成功!" << endl;
    }


运行结果及报错内容

所有的指针转换的地方都会出现标题所给的问题

我的解答思路和尝试过的方法

根据CSDN上给的C2440的一般解决方法试了,但是我觉得不对

我想要达到的结果

成功按照我写的代码实现双向链表的创建,并将输入的信息成功插入