单链表模板类构造函数的非法使用问题

我创建了一个结构体以及一个模板类,用于实现单链表的功能:

struct Node {
    T data;
    struct Node *next;
};
template<class T>

class LinkList {
    private:
        Node *head;
    public:
        LinkList() {
            head = new Node;
            head->next = NULL;
        }
        LinkList(T a[], int n);
        ~LinkList();
        void insert(int i, T x);
        T Delete(int i);
        Node *get(int i);
        int locate(T x);
        int length();
        void print();
};

并且在主函数中创建了一个数组,准备用构造函数去给单链表赋值:

int main() {

    int arr[20] = {1, 2, 3, 4};
    LinkList list(arr, 20);
    list.LinkList();
    list.LinkList(arr, 20);
    list.insert(5, 5);
    list.get(4);
    list.locate(2);
    list.print();
}

此时编译器却告诉,主函数中出现了对构造函数的非法调用错误:

img


请问为什么会发生这样的编译错误,又该如何解决呢?

你这基础不过关呀,在主函数中,调用构造函数的语句应该是 LinkList list(arr, 4);,而不是 LinkList list(arr, 20);。因为数组 arr 中只有 4 个元素,所以创建链表时应该给出正确的数组长度,否则可能会访问到未初始化的内存空间。

此外,在主函数中还多次调用了 LinkList 类的构造函数,这是不必要的,因为在类对象被创建时默认会调用构造函数。所以可以将 list.LinkList(); 和 list.LinkList(arr, 20); 这两行代码删除。

不知道你这个问题是否已经解决, 如果还没有解决的话:


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^