重新定义模板特化
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 的方式
我一直在为我的问题寻找解决方案,但找不到 :(
所以,我有一个模板: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.