У меня динамический массив на основе класса, который я звоню 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
, в котором содержится только мой конструктор и деструктор User.
Вы когда-нибудь реализовывали конструктор? – 0x499602D2
Определения шаблона класса должны быть доступны при их создании. Вы не можете определить свой шаблон в исходном файле, как обычно, с не-шаблонами. Переместите определение в файл заголовка или включите определение из файла заголовка. – mfontanini
Возможный дубликат [Почему шаблоны могут быть реализованы только в файле заголовка?] (Http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) – Mat