【问题标题】:Missing ';' before 'template<'失踪 ';'在'模板<'之前
【发布时间】:2013-04-18 20:32:36
【问题描述】:

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

Error 1 error C2143: syntax error : missing ';' before ''template&lt;''

我做的每件事都很标准;没什么特别的:

#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

【问题讨论】:

  • 您是否包含另一个在类定义后没有分号的标头?
  • 我的钱花在了你没有给我们看的代码上 :)
  • 你有#includeing 任何标题吗?
  • 向我们展示一些实际重现问题的代码。由于缺少#endif,您发布的代码无法编译。如果我添加它,它编译得很好。很难解决被描述为“我有一些代码出现问题。这里有一些代码没有出现问题。现在我的问题是什么?”
  • 这是一个头文件吧?可能是在此之前#included 的头文件缺少;

标签: c++ visual-studio-2010 templates header-files


【解决方案1】:

这个错误可能有点误导。

; 出现在之前 template&lt; 不一定重要。

; 实际上是预期的之后 发生在template&lt; 之前。

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

文件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()
{
}

【讨论】:

  • @WouterHuysentruit,这是最合乎逻辑的,真的。
  • @WouterHuysentruit 也许是个猜测,但我敢打赌它是正确的。
  • @Howdy_McGee 原因是预处理器在编译器产生错误之前删除了单个文件的概念。
  • @KeithThompson Good 编译器将在缺少; 的标头中报告错误(上例中为header.h),例如最新版本的 GCC 和 Clang 可以做到这一点。
  • @KeithThompson 我明白了,它当然不适用于 所有 情况。它适用于在类定义之后缺少;,因为这是一个常见问题,因此 GCC/Clang 可以检测到 这些 情况。但他们不能创造奇迹。还没有。 ;)
猜你喜欢
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
相关资源
最近更新 更多