我有 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 构造函数实现的第一行。
我之前做了一些阅读,大多数询问过这个错误的人最终都只是拼写错误,我在我的代码中找不到这样的东西。任何关于我如何解决这个问题的想法都会很棒,在此先感谢,Will。
编辑:
在与 DanielFrey 反复讨论之后,我们发现了这个错误的原因。创建 TreeNode.tem 文件时,我使用内置的 Visual Studio 文件创建器(简单地“添加文件”)来制作一个空白 *.cpp 文件,然后我将其重命名以适合我的目的。为了解决这个问题,我创建了一个空白 *.h 文件(显然存在元数据差异),然后将其重命名为 TreeNode.tem 并适当填充。这足以解决其他有同样问题的人的问题。