C++ 嵌套类模板 错误 C2440 '=':无法从'type'转换为'same type'



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

错误C2440"initializing":无法从"HashTable::HashTableEntry*"转换为"HashTable::HashTableEntry*"`错误C2440"=":无法从"HashTable::HashTableEntry*"转换为"HashTable::HashTableEntry*">

它出现在我的HashTablerehash()函数中。下面是代码片段:

template<class T, class V>
class HashTable {
private:
template<class T, class V> struct HashTableEntry {
T key;
V value;
};
...
int size;
int capacity;
HashTableEntry<T,V>* A;
public:
// ctor
HashTable(int cap) :
size(0), capacity(cap), A(new HashTableEntry<T,V>[cap])
{
...
}
...
template<typename T, typename V> void rehash()
{
...
HashTableEntry<T,V>* newMemoryRegion = new HashTableEntry<T,V>[capacity];
HashTableEntry<T,V>* disposable = A; // FIRST ERROR HERE
A = newMemoryRegion;                 // SECOND ERROR HERE
...
}
...
}

我想做的(正如你可能意识到的(是让disposable指向A的内存地址,然后让A指向newMemoryRegion的地址。

我试着static_cast<>他们-不好。然后我去掉了嵌套类——仍然是同样的错误。最后,我尝试了reinterpret_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

为什么会发生这种情况?我怎样才能做到这一点?

为什么HashTableEntryrehash()使用自己的参数模板化,这些参数与HashTable的模板参数镜像?您应该从HashTableEntryrehash()中删除模板,并让它们继承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;
...
}
...
};

相关内容

最新更新