所以我一直在尝试创建一个简单的数组列表类,并且在开始时已经卡住了......
我的头文件(我删除了我的.cpp文件但仍然收到相同的消息)
#ifndef ARRAYLIST_H
#define ARRAYLIST_H
#include <iostream>
using namespace std;
template <typename T>
class ArrayList {
private:
T *arr;
int length;
public:
ArrayList();
void Insert(T item);
void Print();
//friend &ostream operator<< (ostream &out, ArrayList &al);
};
#endif
和我的错误
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall ArrayList<int>::ArrayList<int>(void)" (??0?$ArrayList@H@@QAE@XZ) referenced in function _main
1>C:\Users\Gannash\Desktop\Programming\C++WS\XMLReader\Debug\XMLReader.exe : fatal error LNK1120: 1 unresolved externals
答案 0 :(得分:1)
就像你只声明了类的方法而没有定义它们
将所有定义放在标题
中答案 1 :(得分:1)
如果要定义模板类,则应提供内联的所有成员函数implmeentations。丢失的ctor绝对是一个被识别出来的问题,但是当你真正使用你的课时,其他问题就会出现。此外,还有标准容器可以提供您可能想要实现的功能,最明显的是std :: vector。
此外,在头文件中使用命名空间是禁止的(或至少非常不鼓励。) 你应该使用std :: qualification,尤其是你只需要一次。
答案 2 :(得分:0)
您尚未在.cpp文件中定义ArrayList(),Insert()和Print()。
您需要为这些函数编写代码或将它们转换为纯虚函数,即virtual Print()=0;
答案 3 :(得分:0)
让我们剖析错误信息:
unresolved external symbol "public: __thiscall ArrayList<int>::ArrayList<int>(void)" (??0?$ArrayList@H@@QAE@XZ) referenced in function _main
unresolved external symbol
=&gt;声明了一些符号(此处为函数),但未定义
ArrayList<int>::ArrayList<int>(void)
=&gt;使用T = int
referenced in function _main
=&gt;可能在main()中有以下代码:
ArrayList<int> IntList;
解决方案是提供构造函数的实现,可能是:
ArrayList() : arr( 0 ), length( 0 ) {}
在课堂内。
std::array
std::vector