我坚持用c ++中的模板类

时间:2012-02-10 23:06:47

标签: c++ class templates arraylist

所以我一直在尝试创建一个简单的数组列表类,并且在开始时已经卡住了......

我的头文件(我删除了我的.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

4 个答案:

答案 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

实例化的构造函数或ArrayList类模板

referenced in function _main =&gt;可能在main()中有以下代码:

  ArrayList<int> IntList;

解决方案是提供构造函数的实现,可能是:

ArrayList() : arr( 0 ), length( 0 ) {}

在课堂内。


顺便说一句,请随时看到以下内容供您参考:

  std::array

  std::vector