4

我在编译程序时遇到了一个奇怪的错误:

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

4

1 回答 1

12

这个错误可能有点误导。

;a发生在之前 并不一定重要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()
{
}
于 2013-04-18T20:37:01.683 回答