C++类实现链表调用display出现undefined reference链接错误如何解决
错误原因
这是C++编译链接阶段典型的未定义引用错误,触发原因如下:
- 你在
linkedlist类的声明中,声明了带参构造函数linkedlist(int A[], int n)、析构函数~linkedlist()两个成员函数,但只做了声明没有写对应的实现代码,链接器找不到这两个函数的实际执行逻辑就会抛出该错误。 - 另外还存在一处语法问题:你没有在
linkedlist类的public权限块中声明display()成员函数,直接在类外实现该函数也是不符合C++语法要求的,当前报错是链接阶段先触发了函数未定义的问题,修复后这个问题也会暴露。
修复方案
按照以下几点修改代码即可:
- 在
linkedlist类的public块中补充display()的函数声明 - 补全带参构造函数的实现,逻辑为遍历数组元素,逐个创建节点拼接成链表
- 补全析构函数的实现,遍历链表逐个释放节点内存,避免内存泄漏
修正后的完整代码如下:
#include<iostream> using namespace std; class node { public: int data; node *next; }*head; class linkedlist { private: node *first; public: linkedlist(){first=NULL;} linkedlist(int A[], int n); ~linkedlist(); void display(); // 补充display函数声明 }; // 补全带参构造函数实现 linkedlist::linkedlist(int A[], int n) { first = new node; first->data = A[0]; first->next = NULL; node* last = first; for(int i = 1; i < n; i++) { node* t = new node; t->data = A[i]; t->next = NULL; last->next = t; last = t; } } // 补全析构函数实现 linkedlist::~linkedlist() { node* p = first; while(first) { first = first->next; delete p; p = first; } } void linkedlist :: display(){ node *p = first; while(p!=0){ cout<<p->data<<" "; p=p->next; } } int main(){ int A[]={2, 3, 4, 5, 6}; linkedlist l(A,5); l.display(); }
内容的提问来源于stack exchange,提问作者NoobCoder
相关产品推荐
相关产品推荐

