首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模板类抛出错误C2143:语法错误:“缺失”;“<”之前的“

模板类抛出错误C2143:语法错误:“缺失”;“<”之前的“
EN

Stack Overflow用户
提问于 2013-10-12 07:18:59
回答 1查看 2.6K关注 0票数 3

我有一个模板化的类,分成两个文件,我试图开始工作,但似乎找不出这个错误的解决方案: error C2143:语法错误:缺失;‘前面'<’。

H文件如下所示

代码语言:javascript
运行
复制
#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“文件:

代码语言:javascript
运行
复制
#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并适当地填充。这足以解决其他有同样问题的人的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-12 07:30:13

您所展示的代码是好的,它本身并不是问题所在。我唯一能想象的会导致这个问题的事情是,您(或您的构建系统)试图自己编译TreeNode.tem。这是行不通的,而且无论如何也不需要。

请确保在一个单独的文件中运行测试:

代码语言:javascript
运行
复制
#include "TreeNode.h"

int main()
{}

看看它是否能编译。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19331618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档