0

我正在学习 C++,目前遇到类模板的奇怪问题。这是我的头文件:

#ifndef VECTOR_H
#define VECTOR_H
#include <iostream>
#include <list>

using namespace std;

template <int n>
class Vector {

public:
    list<float> coords;
    Vector();
    Vector(list<float> ncoords);
};

template <int n>
Vector<n>::Vector() {
    coords.assign(n, 0.0);
}
#endif

这是我的 .cpp 文件:

#include "vector.h"
#include <list>

using std::ostream;
using namespace std;

template <int n>
Vector<n>::Vector(list<float> ncoords): coords {ncoords}{}

如果我这样做,一切都很好Vector<2> vector;

但是如果我尝试链接器会出错 Vector<20> vector2 { list<float>{} };

错误信息

未定义对 `Vector<20>::Vector(std::list >)' 的引用

问题是 - 我该如何解决这个问题?

4

1 回答 1

2

模板必须在头文件中实现。这是由于链接的工作方式。仔细阅读这里的详尽答案。下一次在询问之前搜索。

于 2013-03-17T20:15:42.723 回答