2013-04-18 2 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'у каких-либо заголовков? – 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() 
{ 
} 

Edit:

Причина, по которой эта ошибка компилятора привела вас к неправильному файлу, заключается в том, что до компиляции, препроцессор будет обрабатывать main.cpp в этот единственный поток символов.

class MyClass 
{ 

} 

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

int main() 
{ 
} 
+0

Это дикое предположение :) –

+4

@WouterHuysentruit, это самый логичный, действительно. – chris

+3

@WouterHuysentruit Может быть, догадаться, но я бы поставил некоторые чеддер, это правильно. – WhozCraig