c++ - C++ 嵌套类模板错误 C2440“=”:无法从“类型”转换为“相同类型”
问题描述
我在下面的代码中得到 2 个(可能)相同的错误:
错误 C2440 '初始化':无法从 'HashTable::HashTableEntry *' 转换为 'HashTable::HashTableEntry *'` 错误 C2440 '=':无法从 'HashTable::HashTableEntry *' 转换为 'HashTable::HashTableEntry *'
它发生在我的HashTable
课堂上,rehash()
功能。下面是代码片段:
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
为什么会这样?我怎样才能使这项工作?
解决方案
为什么要使用它们自己的参数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;
...
}
...
};
推荐阅读
- python - 在 TensorFlow 教程中使用自定义数据集
- java - 如何使用 fromGson 映射数组等中的对象?
- kubernetes - 如何将动态数据传递给 helm 子图
- r - 有没有办法让 R 中的函数输出成为 R 降价块?
- javascript - 倒计时服务器端最佳实践
- python - Python中的换行符显示错误的结果
- reactjs - 如何使用钩子在 redux 中重新渲染组件
- json - 如何在launch.json中传递非对象参数以在VS Code中进行调试
- batch-file - 批处理脚本重命名所有子文件夹中的最新文件?
- python - 如何从列表列表中创建字典键?