重新定义模板特化

Redefinition of template specialization

我一直在为我的问题寻找解决方案,但找不到 :( 所以,我有一个模板: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。而shell不是模板是正常的class.

这是我的模板及其方法专业化:

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`

如果有人告诉我我做错了什么以及如何避免这种重新定义,那就太好了:)提前谢谢你!

template <>
inline ListOfPolyminoes<1>::ListOfPolyminoes(){
    NPoly.push_back(Polyminoe<1>());
}

应该有帮助。 您没有明确 inline 您的函数,这就是它在包含您的 header.

的每个文件中定义 linkage-publicly 的方式