我一直在寻找解决问题的方法,但是我找不到它:(
因此,我有一个模板: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`
如果有人告诉我我在做什么错以及如何避免这种重新定义,那将是非常好的,谢谢您!
答案 0 :(得分:0)
template <>
inline ListOfPolyminoes<1>::ListOfPolyminoes(){
NPoly.push_back(Polyminoe<1>());
}
应该有帮助。
您无需显式inline
来获取包含链接标头的每个文件中公开链接的函数。