Я искал решение для своей проблемы, но не смог его найти :( Итак, у меня есть шаблон: template < int N > class ListOfPolyomines
и его специализация для N = 1. Файл listofpolyomines.h включен в основной файли все работает нормально. Но когда я включил listofpolyomines.h в shell.h (который имеет реализацию в shell.cpp) и shell.h в main.cpp, то это ошибка переопределения.
У меня естьпопытался скомпилировать его без shell.cpp (реализация только в shell.h), и он тоже работал нормально. Я попытался также скомпилировать его без spezialization, но с shell.cpp, и он тоже работал. Таким образом, шаблон spezalization и файлПроблема заключается в shell.cpp. В каждой библиотеке, конечно, #ifndef #define #endif. И shell - это не шаблон, а обычный класс.
Это мой шаблон и специализация его метода:
template <int N>
class ListOfPolyminoes {
public:
ListOfPolyminoes();
~ListOfPolyminoes();
void printPoly();
...
private:
bool ifPolyExist(Polyminoe<N> temp);
std::vector< Polyminoe<N> > NPoly;
void generatePoly(Polyminoe<N-1> poly);
};
template <>
ListOfPolyminoes<1>::ListOfPolyminoes(){
NPoly.push_back(Polyminoe<1>());
}
// Polyminoe - это другой шаблон. ListOfPolymiones имеет вектор Polyminoe
Это ошибка:
In function `__gnu_cxx::new_allocator<Polyminoe<1> >::~new_allocator()': ...`
`[349] multiple definition of ListOfPolyminoes<1>::ListOfPolyminoes()' ...`
`[49] first defined here`
Было бы очень хорошо, если бы кто-то сказал мнечто я делаю не так и как избежать этого переопределения :) Заранее спасибо!