我有一个基于动态数组的类,我正在调用MyList
,如下所示:
#ifndef MYLIST_H
#define MYLIST_H
#include <string>
#include <vector>
using namespace std;
template<class type>
class MyList
{
public:
MyList();
~MyList();
int size() const;
type at() const;
void remove();
void push_back(type);
private:
type* List;
int _size;
int _capacity;
const static int CAPACITY = 80;
};
#endif
我还有一个我正在调用User
的类,我希望将MyList
的实例包含为私有数据成员。用户看起来像这样:
#ifndef USER_H
#define USER_H
#include "mylist.h"
#include <string>
#include <vector>
using namespace std;
class User
{
public:
User();
~User();
private:
int id;
string name;
int year;
int zip;
MyList <int> friends;
};
#endif
当我尝试编译时,我的user.cpp
文件中出现错误:
对
的未定义引用MyList::Mylist()
我发现这很奇怪,因为MyList
与user.cpp
完全无关,{{1}}只包含我的用户构造函数和析构函数。
答案 0 :(得分:1)
确保将模板类的声明和定义都写入标题(在标题中定义 MyList 而不是.cpp文件中)
答案 1 :(得分:0)
原因是您没有提供MyClass<int>
构造函数定义。不幸的是,在C ++中,你不能通过在头文件中声明方法并在实现中定义它们来划分模板类定义。至少如果你想在其他模块中使用它。因此,在您的情况下,User类现在需要MyClass<int>::MyClass()
定义。有两种方法可以做到:
(最简单的)提供正确的构造函数定义:
MyClass() {
...
}
或
在类定义之后在MyClass.h中添加方法定义:
template<class type> MyList<type>::MyList() {
...
}