Я искал решение для своей проблемы, но не нашел :( Итак, у меня есть шаблон: template < int N > class ListOfPolyomines
и его специализация для N = 1. Файл listofpolyomines.h подключен к основному файлу, и все работает нормально , Но когда я включил listofpolyomines.h в shell.h (который имеет реализацию в shell.cpp) и shell.h в main.cpp, это ошибка переопределения.
Я пытался скомпилировать его без shell.cpp (реализация только в shell.h), и он тоже работал нормально. Я также пытался скомпилировать его без специализации, но с shell.cpp, и он тоже работал. Таким образом, проблема заключается в спецализации шаблона и файле shell.cpp. В каждой библиотеке, конечно же, есть #ifndef #define #endif. И шелл это не шаблон это обычный класс.
Это мой шаблон и специализация его метода:
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`
Было бы очень хорошо, если бы кто-нибудь сказал мне, что я делаю неправильно и как избежать этого переопределения :) Заранее спасибо!