Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 深度复制(可能与指针相关)_C++_Pointers_Linked List - Fatal编程技术网

C++ 深度复制(可能与指针相关)

C++ 深度复制(可能与指针相关),c++,pointers,linked-list,C++,Pointers,Linked List,所以我尝试深度复制我的哈希表。我的哈希表是一个充满链表的数组。 我已经编写了链表构造函数/复制构造函数/重写操作符,它们工作得非常好 所以我编写了以下代码,但是for循环中有一个问题 HashTable.cpp HashTable::HashTable() { } HashTable::HashTable(const HashTable & ht) { bucketSize = ht.bucketSize; count = ht.count; LinkedLis

所以我尝试深度复制我的哈希表。我的哈希表是一个充满链表的数组。 我已经编写了链表构造函数/复制构造函数/重写操作符,它们工作得非常好

所以我编写了以下代码,但是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];
}
HashTable.cpp
HashTable::HashTable()
{
}
HashTable::HashTable(常量HashTable&ht)
{
bucketSize=ht.bucketSize;
count=ht.count;
LinkedList**table=新LinkedList*[ht.bucketSize];
对于(int i=0;i

我怀疑它与指针有关,但是没有错误消息,只有当我按下run:abort()时弹出的一个窗口被调用。

在提供的源代码中,类和构造函数声明中都有错误。为了更好地检测这些误解,最好在编译器解析源代码时提供源代码

第一步-在
类哈希表
中,所有变量只声明,不初始化

变量必须存储
链接列表的数组
。这是一个
LinkedList**表在复制构造函数中声明

第二步-默认构造函数
哈希表(void)将使用
DefaultCapacity
参数

在默认构造函数
哈希表(void)
中,将创建一个
defaultCapacity
数组并 使用默认的
LinkedList()
=空列表初始化


请尝试创建一个并向我们展示。另外,您认为在复制构造函数中使用名为
table
的成员变量和同名的局部变量不会有问题吗?如果我将该行更改为:table=new LinkedList[ht.bucketSize];我得到一个错误,它说,表必须是一个可修改的左值。但我不想改变它。我试图创建一个新的哈希表,而不是修改现有的哈希表。这是因为
table
是一个数组,而不是指针。不要使用数组(或指针),而是使用
std::vector
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::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::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]);
    }
}