我有一个模板化的类,分成两个文件,我试图开始工作,但似乎找不出这个错误的解决方案: error C2143:语法错误:缺失;‘前面'<’。
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文件创建者(简单地说是"add“)生成一个空白的*.cpp文件,然后根据我的目的重命名该文件。为了解决这个问题,我创建了一个空白*.h文件(显然存在元数据差异),该文件随后被重命名为TreeNode.tem并适当地填充。这足以解决其他有同样问题的人的问题。
发布于 2013-10-12 07:30:13
您所展示的代码是好的,它本身并不是问题所在。我唯一能想象的会导致这个问题的事情是,您(或您的构建系统)试图自己编译TreeNode.tem。这是行不通的,而且无论如何也不需要。
请确保在一个单独的文件中运行测试:
#include "TreeNode.h"
int main()
{}看看它是否能编译。
https://stackoverflow.com/questions/19331618
复制相似问题