0

我有一个我正在调用的基于动态数组的类,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 构造函数和析构函数。

4

2 回答 2

1

确保将模板类的声明和定义都写入标题中(在标题中定义MyList而不是在 .cpp 文件中)

于 2013-02-10T14:46:33.373 回答
0

原因是您没有提供MyClass<int>构造函数定义。不幸的是,在 C++ 中,您不能通过在头文件中声明方法并在实现中定义它们来划分模板类定义。至少如果您想在其他模块中使用它。因此,在您的情况下,用户类现在需要MyClass<int>::MyClass()定义。有两种方法可以做到:

  1. (最简单的)提供适当的构造函数定义: MyClass() { ... }

  2. 在类定义之后在 MyClass.h 中添加方法定义,如下所示: template<class type> MyList<type>::MyList() { ... }

于 2013-02-10T15:18:29.560 回答