我想实现一个模板链表,但是每次都报链接错误,问题在LinkList模板类的模板成员函数调用时,什么原因百思不得其解。
//LinkList.h
#ifndef LINKLIST_H
#define LINKLIST_H
#include<iostream>
using namespace std;
template<typename S>
struct Node{ //模板结构体
Node():data(),next(NULL){}
S data;
Node *next;
};
template<typename T>
class LinkList{
public:
LinkList(){
cout<<"I am inside."<<endl;
head = new Node<T>();
end = head;
}
public:
void push_head(void);
private:
Node<T> *head;
Node<T> *end;
};
#endif
//LinkList.cpp
#include<iostream>
#include"LinkList.h"
template<typename T>
void LinkList<T>::push_head(void){
cout<<"I am push_head."<<endl;
}
//main.cpp
#include <iostream>
#include"LinkList.h"
int main(int argc, char** argv) {
LinkList<int> temp;
temp.push_head();
}
查询了c++primer和文心一言,没有答案。
将模板函数的实现移动到头文件中,保证在模板实例化时编译器可以访问完整的实现。
LinkList.cpp 文件不再需要,直接删除即可
如果一定要把模板实现放在 .cpp 文件中,可以通过显式实例化解决。例如,在 LinkList.cpp 中添加:
但这种方法仅适用于有限的、预先确定的模板参数类型(如 int 或 double),并不通用。