C++ C++;嵌套类模板错误C2440'=';:无法从';类型';至';相同类型';
我在下面的代码中得到2个(可能)相同的错误: Error C2440 'initializing': cannot convert from 'HashTable::HashTableEntry *' to 'HashTable::HashTableEntry *'` Error C2440 '=': cannot convert from 'HashTable::HashTableEntry *' to 'HashTable::HashTableEntry *' 我想做的是(正如你可能意识到的那样)让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 *' 我想做的是(正如你可能
一次性
指向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;
...
}
...
};