C++ 模板专门化的问题
我正在努力让模板专业化工作。即使使用这个简单的示例代码,它也不会工作 PriorityQueue.hC++ 模板专门化的问题,c++,templates,template-specialization,C++,Templates,Template Specialization,我正在努力让模板专业化工作。即使使用这个简单的示例代码,它也不会工作 PriorityQueue.h template<class T> class PriorityQueue { public: T remove(); }; template<> class PriorityQueue<string> : public PriorityQueue<string> { public: string remove();
template<class T>
class PriorityQueue {
public:
T remove();
};
template<>
class PriorityQueue<string> : public PriorityQueue<string> {
public:
string remove();
};
您的专业化定义为递归继承。这不行:
class PriorityQueue<string> : public PriorityQueue<string>
您忘了定义一个名为
string
的类型。我也试过了。这样做,我也无法访问第一个PriorityQueue类中声明的其他方法。@Ferdinand,这是因为这两个方法是不相关的PriorityQueue
是一种单独的类型,它只与PriorityQueue
共享一个名称。它不共享任何成员,也没有层次关系。@Ferdinand如果“第一个类中有其他方法”,那么您没有提供足够的信息来回答您的问题。@Ferdinand我编辑了答案,向您展示了如何专门化一个成员函数在头文件中声明专门化。在一个cpp文件中定义专门化。
.../PriorityQueue.h39:38: error: :39:38: error: base class has incomplete type
base class has incomplete type
class PriorityQueue<string> : public PriorityQueue<string> {class PriorityQueue<string> : public PriorityQueue<string> {
~~~~~~~^~~~~~~~~~~~~~~~~~~~~ ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
duplicate symbol __ZN13PriorityQueueINSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEE6removeEv in:
CMakeFiles/Oblig2_Oppg2.dir/main.cpp.o
CMakeFiles/Oblig2_Oppg2.dir/PriorityQueue.cpp.o
ld: 1 duplicate symbol for architecture x86_64
class PriorityQueue<string> : public PriorityQueue<string>
template<>
class PriorityQueue<string> {
...
}
template<>
string PriorityQueue<string>::remove() { /* your code there */ }