C++ C++;嵌套类模板错误C2440'=';:无法从';类型';至';相同类型';

C++ C++;嵌套类模板错误C2440'=';:无法从';类型';至';相同类型';,c++,visual-studio,templates,inner-classes,C++,Visual Studio,Templates,Inner Classes,我在下面的代码中得到2个(可能)相同的错误: Error C2440 'initializing': cannot convert from 'HashTable::HashTableEntry *' to 'HashTable::HashTableEntry *'` Error C2440 '=': cannot convert from 'HashTable::HashTableEntry *' to 'HashTable::HashTableEntry *' 我想做的是(正如你可能

我在下面的代码中得到2个(可能)相同的错误:

Error C2440 'initializing': cannot convert from 'HashTable::HashTableEntry *' to 'HashTable::HashTableEntry *'` Error C2440 '=': cannot convert from 'HashTable::HashTableEntry *' to 'HashTable::HashTableEntry *' 我想做的是(正如你可能意识到的那样)让
一次性
指向
A
的内存地址,然后
A
指向
新内存区域的地址

我试图
static\u cast
他们-没用。然后我取出嵌套类——仍然是相同的错误。最后,我尝试了
reinterpret\u cast
,第一个错误(初始化)消失了,但第二个错误奇怪地持续存在:

HashTableEntry<T,V>* disposable = reinterpret_cast<HashTableEntry<T, V>*>(A); // no more errors here
A = reinterpret_cast<HashTableEntry<T, V>*>(newMemoryRegion); // SAME SECOND ERROR persists here
HashTableEntry*disposable=reinterpret_cast(A);//这里没有更多的错误
A=重新解释(新记忆区域);//同样的第二个错误仍然存在

为什么会这样?我如何才能做到这一点?

为什么
HashTableEntry
rehash()
使用自己的参数作为模板,以反映
HashTable
的模板参数?您应该从
HashTableEntry
rehash()
中删除模板,让它们从
HashTable
继承参数:

template<class T, class V>
class HashTable {
private:
    struct HashTableEntry {
        T key;
        V value;
    };
    ...
    int size;
    int capacity;
    HashTableEntry* A;
public:
    // ctor
    HashTable(int cap) :
        size(0), capacity(cap), A(new HashTableEntry[cap])
    {
        ...
    }
    ...
    void rehash()
    {
        ...
        HashTableEntry* newMemoryRegion = new HashTableEntry[capacity];
        HashTableEntry* disposable = A;
        A = newMemoryRegion;
        ...
    }
    ...
};
模板
类哈希表{
私人:
结构HashTableEntry{
T键;
V值;
};
...
整数大小;
国际能力;
哈希表条目*A;
公众:
//执行器
哈希表(int-cap):
大小(0)、容量(cap)、A(新哈希表条目[cap])
{
...
}
...
无效再灰化()
{
...
HashTableEntry*newMemoryRegion=新HashTableEntry[容量];
HashTableEntry*一次性=A;
A=新记忆区域;
...
}
...
};
template<class T, class V>
class HashTable {
private:
    struct HashTableEntry {
        T key;
        V value;
    };
    ...
    int size;
    int capacity;
    HashTableEntry* A;
public:
    // ctor
    HashTable(int cap) :
        size(0), capacity(cap), A(new HashTableEntry[cap])
    {
        ...
    }
    ...
    void rehash()
    {
        ...
        HashTableEntry* newMemoryRegion = new HashTableEntry[capacity];
        HashTableEntry* disposable = A;
        A = newMemoryRegion;
        ...
    }
    ...
};