Class 模板专门化的重新定义

Class 模板专门化的重新定义,class,c++11,templates,redefinition,Class,C++11,Templates,Redefinition,我一直在寻找问题的解决方案,但找不到:( 因此,我有一个模板:template类ListofPolymines及其对N=1的特殊化。文件ListofPolymines.h包含在主文件中,一切正常。但当我将ListofPolymines.h包含在shell.h中(在shell.cpp中有实现)并将shell.h包含在main.cpp中时,则是重新定义错误 我试过在没有shell.cpp(仅在shell.h中实现)的情况下编译它,它也可以正常工作。我也试过在没有特殊化的情况下编译它,但使用shell

我一直在寻找问题的解决方案,但找不到:( 因此,我有一个模板:
template类ListofPolymines
及其对N=1的特殊化。文件ListofPolymines.h包含在主文件中,一切正常。但当我将ListofPolymines.h包含在shell.h中(在shell.cpp中有实现)并将shell.h包含在main.cpp中时,则是重新定义错误

我试过在没有shell.cpp(仅在shell.h中实现)的情况下编译它,它也可以正常工作。我也试过在没有特殊化的情况下编译它,但使用shell.cpp,它也可以正常工作。因此,模板特殊化和文件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>());
}


模板
polyminoes类{
公众:
Polyminoes()列表;
~ListOfPolyminoes();
void printPoly();
...
私人:
bool-ifPolyExist(Polyminoe-temp);
std::vectorNPoly;
void generatePoly(Polyminoe poly);
};
模板
ListOfPolyminoes::ListOfPolyminoes(){
NPoly.push_back(Polyminoe());
}
//Polyminoe是另一个模板。Polyminoe列表有Polyminoe的载体

这就是错误:

In function `__gnu_cxx::new_allocator<Polyminoe<1> >::~new_allocator()': ...`
`[349] multiple definition of ListOfPolyminoes<1>::ListOfPolyminoes()' ...`
`[49] first defined here`

函数“\uu gnu\u cxx::new\u allocator::~new\u allocator()”中的
:`
`[349]ListOfPolyminoes的多个定义::ListOfPolyminoes()`
`[49]首先定义在这里`
如果有人告诉我我做错了什么,以及如何避免这种重新定义,那就太好了:)提前谢谢你

模板
内联ListOfPolyminoes::ListOfPolyminoes(){
NPoly.push_back(Polyminoe());
}
应该有帮助。 您没有显式地
内联
您的函数,这就是它如何在包含标头的每个文件中公开定义链接的方式。

模板
内联ListOfPolyminoes::ListOfPolyminoes(){
NPoly.push_back(Polyminoe());
}
应该有帮助。 您没有显式地
inline
您的函数,这就是它如何在包含头的每个文件中公开定义链接的方法