Я изучаю C++ и в настоящее время испытываю странную проблему с шаблоном класса. Это мой файл заголовка:Параметр выражения класса 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>{} };
Сообщение об ошибке
неопределенная ссылка на `Вектор < 20> :: Vector (станд :: список>)»
Вопрос - как я могу решить эту проблему?
Вы не можете реализовать шаблоны в .cpp-файлах, вы должны поместить их в заголовок. – ipc
Шаблоны должны быть реализованы в заголовках. См. [Почему] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file). – Synxis