模板专用化问题
Problems with template specialization
我正在努力使模板专业化发挥作用。即使使用这个简单的示例代码,它也不会起作用。
PriorityQueue.h
template<class T>
class PriorityQueue {
public:
T remove();
};
template<>
class PriorityQueue<string> : public PriorityQueue<string> {
public:
string remove();
};
优先级队列.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 上项目的链接,其中包含最近更新的代码。
这是新的错误消息:
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> {
...
}
如果您专门化模板类,则必须提供它包含的所有内容。 但是,如果您只想使remove()
成员专用化,请执行以下操作:
template<>
string PriorityQueue<string>::remove() { /* your code there */ }
现场演示
相关文章:
- 警告处理为错误这里有什么问题
- .cpp和.h文件中的模板专用化声明
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- C++部分模板专用化问题
- C++隐式/显式模板方法专用化问题
- C++ GCC 的部分模板专用化问题
- 专用纯虚拟模板函数(未定义引用)的另一个问题
- 嵌套类模板专用化问题
- 显式模板专用化和依赖名称查找问题
- 模板专用化和enable_if问题
- 别名模板专用化问题
- 模板专用化问题
- 部分模板专用化有什么问题
- g++中的显式模板专用化导致问题
- C++结构成员模板函数的显式专用化 - 这是一个Visual Studio问题吗?
- 解决函数模板部分专用化问题