模板类引发错误 C2143:语法错误:在"<"之前缺少";"
Template class throwing error C2143: syntax error : missing ';' before '<'
我有 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 并适当填充。这足以为遇到相同问题的其他人解决问题。
您显示的代码没问题,它本身不是问题。我唯一能想象的会导致这个问题的是你(或你的构建系统)试图自己编译TreeNode.tem
。这是行不通的,反正也不需要。
确保通过将其放在单独的文件中来运行测试:
#include "TreeNode.h"
int main()
{}
看看它是否编译。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- &lt;&lt;操作员在C 中超载错误
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- '&lt;'''&lt;'''&quot的模板类错误''令牌”
- 在尝试超载&lt;&lt;时链接错误2005和1169操作员
- 错误:没有匹配'运算符<<"在'std::cout
- 过载<<比如cout错误
- 重载& lt; & lt;为什么我得到以下错误
- 重载ostream&时转换错误无效;operator< & lt;
- 重载<<运算符错误C2804:二进制'运算符<<'参数太多
- 编译器错误,包括'<'代币
- 重载& lt; & lt;错误