编辑:我从头开始重新启动后修复了它。我不确定是什么导致了这个问题。如果有人有任何想法或洞察导致主要问题的原因,我将在后续编辑第一篇文章。
所以我正在做一个家庭作业,以创建一个利用模板的堆类,以便能够使用数值数据和字符串。我正在使用的编译器是visual studio 2010
头文件看起来像这样..
#ifndef HEAP_H
#define HEAP_H
#include <iostream>
#include <vector> // not needed if you use a static array
using std::cout;
using std::endl;
using std::vector;
template <typename type>
class Heap {
... the method headers I have to implement in the Heap.template file
};
#include "Heap.template"
#endif
Heap.template文件是我们应该实现堆的方法的地方。但是,我不能在没有被错误宰杀的情况下编译。这是教练自己提供的第一种方法:
template <typename type>
Heap<type>::Heap(bool maxheap) {
// this default constructor supports a dynamic array. In this array, the root
// of the heap begins at index 1; the variable "dummy" is used to fill the
// zero position of the dynamic array.
type dummy;
this->maxheap = maxheap;
heap.push_back(dummy);
size = heap.size()-1;
}
即使我注释掉了我实施的其他方法,我仍然会看到错误
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default- int
error C2988: unrecognizable template declaration/definition
error C2059: syntax error : '<'
在线
Heap<type>::Heap(bool maxheap) {
我尝试在提供的.template文件中实现的每个方法都存在这些相同的错误集,例如此打印方法
template <typename type>
void Heap<type>::PrintHeap()
{
for( std::vector<type>::iterator i = heap.begin(); i != heap.end(); ++i)
{
cout << *i << ' ';
}
}
给我与他提供的方法相同的错误集。我现在真的很困惑,真的不知道是什么导致了这个问题。我很感激有些见解,谢谢!
答案 0 :(得分:0)
在定义成员函数时,不应在类上包含<type>
。这样做:
template <typename type>
Heap::Heap(bool maxheap) {
//...
}
由于template
语句,编译器已经知道该类使用了这些模板参数。