【发布时间】:2016-03-13 21:38:55
【问题描述】:
我正在努力让模板专业化发挥作用。即使使用这个简单的示例代码,它也不起作用。
PriorityQueue.h
template<class T>
class PriorityQueue {
public:
T remove();
};
template<>
class PriorityQueue<string> : public PriorityQueue<string> {
public:
string remove();
};
PriorityQueue.cpp
string PriorityQueue<string>::remove() {
//implementation
}
我收到此错误消息:
.../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> {
~~~~~~~^~~~~~~~~~~~~~~~~~~~~ ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
编辑
我现在已将标头更改为仅专门化成员函数,但仍然出现错误。我可能应该向您展示整个代码,所以这里是 Github 上项目的 link 以及最近更新的代码。
这是新的错误信息:
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
【问题讨论】:
-
你忘了定义一个叫做
string的类型。
标签: c++ templates template-specialization