模板类抛出错误C2143:语法错误:缺少';'在'<'之前

时间:2013-10-12 07:19:00

标签: c++ templates syntax

我有1个模板化的类分为2个文件,我试图开始工作,但似乎无法找出这个错误的解决方案:错误C2143:语法错误:缺少';'在'<'之前。

TreeNode.h文件如下

#ifndef TREENODE_H
#define TREENODE_H

#include <iostream>
#include <vector>
#include <utility>

using namespace std;

template <typename T>
class TreeNode {
public:
    TreeNode();
    ~TreeNode();

    void addChild(TreeNode<T> *newNode);
    void addKey(T& newKey);

    void setIsLeaf(bool value);
    bool isLeaf() { return leaf; }
private:
    vector<TreeNode<T>*> children;
    vector<T> keys;
    bool leaf;
};

#include "TreeNode.tem"

#endif

这是“TreeNode.tem”文件:

#include <iostream>
#include <utility>

using namespace std;

template<typename T> 
TreeNode<T>::TreeNode()
{
    leaf = true;
}

template<typename T>
TreeNode<T>::~TreeNode()
{
    for (int i = 0; i < children.size(); i++)
    {
        delete children[i];
    }
}

template<typename T>
void TreeNode<T>::addChild(TreeNode<T> *newNode)
{
    children.push_back(newNode);
}

template<typename T>
void TreeNode<T>::addKey(T& newKey)
{
    keys.push_back(newKey);
}

template<typename T>
void TreeNode<T>::setIsLeaf(bool value)
{
    leaf = value;
}

错误的位置位于TreeNode构造函数实现的第一行。

我之前做了一些阅读,并且大多数已经问过这个错误的人已经结束了拼写错误,我在我的代码中找不到这样的东西。 关于如何解决这个问题的任何想法都会很棒, 提前致谢, 将

编辑:

经过与DanielFrey的一些来回,我们发现了这个错误的原因。在创建TreeNode.tem文件时,我使用内置的Visual Studio文件创建器(只是“添加文件”)来创建一个空白的* .cpp文件,然后我将其重命名以满足我的目的。为了解决这个问题,我改为创建了一个空白* .h文件(显然存在元数据差异),然后将其重命名为TreeNode.tem并进行适当填充。这足以解决其他人遇到同样问题的问题。

1 个答案:

答案 0 :(得分:1)

您显示的代码是正常的,它本身不是问题。我能想象的唯一可能导致这个问题的是你(或你的构建系统)试图自己编译TreeNode.tem。这不起作用,反正也不需要。

确保通过将其放在单独的文件中来运行测试:

#include "TreeNode.h"

int main()
{}

并查看它是否编译。