c++ - 未定义的对 `MyLinkedList 的引用::MyLinkedList(int)'
问题描述
我是 C++ 新手,我尝试实现自己的链接列表,而我在以下代码中遇到了这个问题。
主文件
#include <iostream>
#include <string>
#include "headers/heder.h"
using namespace std;
int main() {
MyLinkedList<int> integ = new MyLinkedList<int>(3);
MyLinkedList<string> third ("Cookie", nullptr);
MyLinkedList<string> second ("likes", &third);
MyLinkedList<string> first ("James", &second);
MyLinkedList<string>* selected = &first;
while (selected->getNext() != NULL){
cout << selected->getNext()->getValue() << " ";
selected = selected->getNext();
}
return 0;
}
海德.h
template <class T>
class MyLinkedList {
T value;
MyLinkedList* next;
public:
MyLinkedList *getNext() const;
void setNext(MyLinkedList *next);
T getValue() const;
void setValue(T value);
MyLinkedList(T value, MyLinkedList *next);
MyLinkedList(T value);
MyLinkedList(MyLinkedList *next);
};
heder.cpp
template<class T>
T MyLinkedList<T>::getValue() const {
return value;
}
template<class T>
void MyLinkedList<T>::setValue(T value) {
MyLinkedList::value = value;
}
template<class T>
MyLinkedList<T> *MyLinkedList<T>::getNext() const {
return next;
}
template<class T>
void MyLinkedList<T>::setNext(MyLinkedList *next) {
MyLinkedList::next = next;
}
template<class T>
MyLinkedList<T>::MyLinkedList(T value, MyLinkedList *next):value(value), next(next) {}
template<class T>
MyLinkedList<T>::MyLinkedList(T value):value(value) { next = NULL; }
template<class T>
MyLinkedList<T>::MyLinkedList(MyLinkedList *next): next(next) { &value = NULL; }
为什么我得到他的错误:
CMakeFiles\untitled.dir/objects.a(main.cpp.obj): In function `main':
C:/Users/mstele/CLionProjects/untitled/main.cpp:24: undefined reference to `MyLinkedList<int>::MyLinkedList(int)'
C:/Users/mstele/CLionProjects/untitled/main.cpp:24: undefined reference to `MyLinkedList<int>::MyLinkedList(MyLinkedList<int>*)'
C:/Users/mstele/CLionProjects/untitled/main.cpp:27: undefined reference to `MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::MyLinkedList(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)'
C:/Users/mstele/CLionProjects/untitled/main.cpp:28: undefined reference to `MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::MyLinkedList(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)'
C:/Users/mstele/CLionProjects/untitled/main.cpp:29: undefined reference to `MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::MyLinkedList(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)'
C:/Users/mstele/CLionProjects/untitled/main.cpp:33: undefined reference to `MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::getNext() const'
C:/Users/mstele/CLionProjects/untitled/main.cpp:34: undefined reference to `MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::getNext() const'
C:/Users/mstele/CLionProjects/untitled/main.cpp:34: undefined reference to `MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::getValue() const'
C:/Users/mstele/CLionProjects/untitled/main.cpp:35: undefined reference to `MyLinkedList<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::getNext() const'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\untitled.dir\build.make:100: untitled.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:72: CMakeFiles/untitled.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:84: CMakeFiles/untitled.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:117: untitled] Error 2
我在stackoverflow上没有找到任何类似的答案,所以如果有人能帮助我,我会很高兴。
解决方案
您必须将 heder.cpp 的全部内容移动到 heder.h 中。模板定义必须在使用它们的地方可见,即在 main.cpp 中。这与非模板函数不同。
推荐阅读
- angular - 无法在 Angular 8 中加载 chart.js?
- delphi - Delphi 使用 DLL 指针参数
- python - 查找总和为给定数字的值组合的函数
- python - 识别树中的根父母及其所有孩子
- android - Instrumented 测试是否可以为库模块创建覆盖范围?
- asp.net - ASP.NET MVC 应用程序中是否有任何方法可以确定哪个超时设置导致报告执行失败?
- python - 如何在 django messages.error 中换行
- java - 在 Web 应用程序或桌面应用程序内的框架中重用 android 代码(本机 Java)
- ocaml - Ocaml 中的函子
- angular - workbox.backgroundSync.Plugin 不创建 IndexedDB