2013-04-18 151 views
3

所以我得到一个奇怪的错误,当我编译我的程序:缺少';'前“模板<”

Error 1 error C2143: syntax error : missing ';' before ''template<''

我做的一切都非常标准的;没有什么与众不同的:

#ifndef HEAP_H 
#define HEAP_H 
//************************************************************************** 
template<typename TYPE> 
class Heap 
{ 
    private: 
     TYPE* heapData; 
     int currSize; 
     int capacity; 
     void _siftUp(int); 
     void _siftDown(int); 
     int _leftChildOf(int) const; 
     int _parentOf(int) const; 

    public: 
     Heap(int c = 100); 
     ~Heap(); 
     bool viewMax(TYPE&) const; 
     int getCapacity() const; 
     int getCurrSize() const; 
     bool insert(const TYPE&); 
     bool remove(TYPE&); 
}; 

不太清楚什么是错的。我尝试关闭并重新打开我的程序 - 没有运气。使用Visual Studio 2010

+3

您是否包含另一个在类定义之后没有分号的头? – chris

+11

我的钱是你不向我​​们展示的代码:) – jrok

+0

你'#include'ing任何头? – 0x499602D2

回答

11

该错误可能是有点误导。

这不一定是非常重要的一个;template<之前发生

;实际上无论template<发生后预计

这个例子显示了这是如何发生。

文件header.h

class MyClass 
{ 

} 

文件heap.h

#ifndef HEAP_H 
#define HEAP_H 
//************************************************************************** 
template<typename TYPE> 
class Heap 
{ 
}; 

#endif 

文件main.cpp

#include "header.h" 
#include "heap.h" 

int main() 
{ 
} 

编辑:

此编译器错误导致你错误的文件的原因是汇编,预处理器将处理main.cpp成字符的这种单流。

class MyClass 
{ 

} 

//************************************************************************** 
template<typename TYPE> 
class Heap 
{ 
}; 

int main() 
{ 
} 
+0

这是一个疯狂的猜测:) –

+4

@WouterHuysentruit,这是最合乎逻辑的一个,真的。 – chris

+3

@WouterHuysentruit也许是一个猜测,但我敢打赌一些切达是正确的。 – WhozCraig