所以我正在尝试深度复制我的HashTable。我的哈希表是一个填充链表的数组。 我已经编写了链表构造函数/复制构造函数/覆盖运算符,它们运行良好。
所以我编写了以下内容,但for循环中存在问题。
HashTable.cpp
HashTable::HashTable()
{
}
HashTable::HashTable(const HashTable & ht)
{
bucketSize = ht.bucketSize;
count = ht.count;
LinkedList** table = new LinkedList*[ht.bucketSize];
for (int i = 0; i < bucketSize; i++) {
table[i] = new LinkedList(ht.table[i]);
}
}
HashTable.h
class HashTable {
public:
HashTable();
HashTable(const HashTable& ht);
private:
// Add your member variables and any private member functions here
int bucketSize = defaultCapacity; //default is 101
int count = 0;
LinkedList table[defaultCapacity];
}
我怀疑它与指针有关,但没有错误信息,只有按下运行时弹出窗口:abort()已被调用。
答案 0 :(得分:0)
在提供的源代码中,类和构造函数声明中都存在错误。为了更好地检测这些误解,最好在编译器解析它时提供源代码。
第一步 - 在class HashTable
中,所有变量仅被声明且未初始化。
table
变量必须存储LinkedList
数组。它是一个 复制构造函数中声明的LinkedList **table;
。
class HashTable {
public:
HashTable(void);
HashTable(const HashTable& ht);
private:
// Add your member variables and any private member functions here
int bucketSize;
int count;
LinkedList **table;
};
第二步 - 默认构造函数HashTable(void);
将使用DefaultCapacity
参数。
在默认构造函数
HashTable(void)
中,创建了一个defaultCapacity
数组 使用默认LinkedList()
=空列表初始化。
HashTable::HashTable(void)
{
bucketSize = defaultCapacity; //default is 101
count = 0;
table = new LinkedList*[bucketSize];
for (int i = 0; i < bucketSize; i++) {
table[i] = new LinkedList();
}
}
第三步 - 复制构造函数HashTable(const HashTable & ht)
创建克隆数组并复制item-LinkedList。
在复制构造函数中,每个项目都使用
LinkedList
复制构造函数。错误:
LinkedList** table
的本地声明会覆盖类声明。
HashTable::HashTable(const HashTable & ht)
{
bucketSize = ht.bucketSize;
count = ht.count;
//LinkedList** table = new LinkedList*[ht.bucketSize];
table = new LinkedList*[ht.bucketSize];
for (int i = 0; i < bucketSize; i++) {
table[i] = new LinkedList(ht.table[i]);
}
}