c++ - 第一次尝试构建通用单链表,出现未定义符号错误
问题描述
正如标题所示,我正在尝试学习数据结构,并且从链表开始。我决定让它通用,因为我认为处理其他数据类型会很有用。
我收到这些相关的错误:
我不确定自己做错了什么,也无法识别错误。这是我从头文件开始的代码:
#ifndef LinkedList_hpp
#define LinkedList_hpp
template<class T>
struct Node {
T data;
Node<T>* next;
};
template<class T>
class SingleLinkedList {
private:
Node<T>* head, tail;
public:
SingleLinkedList();
void createNode(const T& theData);
void display();
void insert_start(const T& theData);
void insert_position(int pos, const T& theData);
void delete_first();
void delete_last();
void delete_position(int pos);
Node<T>* search(Node<T>* head, const T& target);
};
#endif /* LinkedList_hpp */
现在这里是关联的 .cpp 文件:
#include "LinkedList.hpp"
#include <iostream>
template<class T>
SingleLinkedList<T>::SingleLinkedList() {
head = nullptr;
tail = nullptr;
}
template<class T>
void SingleLinkedList<T>::createNode(const T& theData) {
Node<T>* temp = new Node<T>;
temp->data = theData;
temp->next = nullptr;
if(head == nullptr) {
head = temp;
tail = temp;
temp = nullptr;
}
else {
tail->next = temp;
tail = temp;
}
}
template<class T>
void SingleLinkedList<T>::display() {
Node<T>* temp = new Node<T>;
temp = head;
while(temp != nullptr) {
std::cout << temp->data << "\t";
temp = temp->next;
}
}
template<class T>
void SingleLinkedList<T>::insert_start(const T& theData) {
Node<T>* temp = new Node<T>;
temp->data = theData;
temp->next = head;
head = temp;
}
template<class T>
void SingleLinkedList<T>::insert_position(int pos, const T &theData) {
Node<T>* previous = new Node<T>;
Node<T>* current = new Node<T>;
Node<T>* temp = new Node<T>;
temp = head;
for(int i = 1; i < pos; i++) {
previous = current;
current = current->next;
}
temp->data = theData;
previous->next = temp;
temp->next = current;
}
template<class T>
void SingleLinkedList<T>::delete_first() {
Node<T>* temp = new Node<T>;
temp = head;
head = head->next;
delete temp;
}
template<class T>
void SingleLinkedList<T>::delete_last() {
Node<T>* previous = new Node<T>;
Node<T>* current = new Node<T>;
current = head;
while(current->next != nullptr) {
previous = current;
current = current->next;
}
tail = previous;
previous->next = nullptr;
delete current;
}
template<class T>
void SingleLinkedList<T>::delete_position(int pos) {
Node<T>* previous = new Node<T>;
Node<T>* current = new Node<T>;
current = head;
for(int i = 1; i < pos; i++) {
previous = current;
current = current->next;
}
previous->next = current->next;
}
最后是我尝试测试代码的 main.cpp 文件:
#include <iostream>
#include "LinkedList.hpp"
int main(int argc, const char * argv[]) {
SingleLinkedList<int> obj;
obj.createNode(2);
obj.createNode(4);
obj.createNode(6);
obj.createNode(8);
obj.display();
return 0;
}
解决方案
您需要将成员函数的实现放入头文件中。
推荐阅读
- javascript - 制作卡车和按钮以提高速度,通过 jQuery 使用 html/js 改变方向
- android - Kotlin Flow 超时结果
- latex - Lyx 修改 moderncv 空白空间
- python - 如何让机器人发回更多单词而不仅仅是第一个 [discord.py]
- c++ - 如何重置rand()函数c ++
- swift - WatchOS ScrollReader 代理缓慢滚动
- spring-boot - 在 Testcontainer Spring 引导测试中模拟服务
- visual-studio-2017 - 在 VS2017 中调试和缺少方法异常
- flutter - 如何在列表磁贴的前导属性中居中图标?
- flutter - ElevatedButton、TextButton 和 OutlinedButton 渐变