我创建了一个结构体以及一个模板类,用于实现单链表的功能:
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();
}
此时编译器却告诉,主函数中出现了对构造函数的非法调用错误:
你这基础不过关呀,在主函数中,调用构造函数的语句应该是 LinkList list(arr, 4);,而不是 LinkList list(arr, 20);。因为数组 arr 中只有 4 个元素,所以创建链表时应该给出正确的数组长度,否则可能会访问到未初始化的内存空间。
此外,在主函数中还多次调用了 LinkList 类的构造函数,这是不必要的,因为在类对象被创建时默认会调用构造函数。所以可以将 list.LinkList(); 和 list.LinkList(arr, 20); 这两行代码删除。
不知道你这个问题是否已经解决, 如果还没有解决的话: