2013-03-17 3 views
0

Я изучаю 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 (станд :: список>)»

Вопрос - как я могу решить эту проблему?

+3

Вы не можете реализовать шаблоны в .cpp-файлах, вы должны поместить их в заголовок. – ipc

+0

Шаблоны должны быть реализованы в заголовках. См. [Почему] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file). – Synxis

ответ

2

Шаблоны должны быть реализованы внутри файлов заголовков. Это связано с тем, как работают ссылки. Внимательно прочтите исчерпывающий ответ here. И в следующий раз перед тем, как спросить.

Смежные вопросы