“{”标记错误之前的预期类名

时间:2013-11-15 06:20:21

标签: c++ class templates inheritance

好吧,我已经检查了缺少的分号,据我所知,我没有任何包含循环,所以我有点难过。我一直在看其他发布的例子,但我仍然没有看到我所缺少的内容。我猜这与使用我没有正确处理的模板有关,但我真的不知道。

In file included from customtester.cpp:6:0:
MyBSTree.h:23:1: error: expected class-name before â{â token

文件:

#ifndef MYBSTREE_H
#define MYBSTREE_H

template <typename T>        //not sure which of these I need,
class AbstractBSTree;        //the include, the forward
#include "abstractbstree.h"  //declaration, or both.

template <typename T>
class TreeNode
{
    T m_data;
    TreeNode<T> * m_right;
    TreeNode<T> * m_left;

};

template <typename T>
class MyBSTree:public AbstractBSTree //this would be line 23
{
    TreeNode<T> * m_root;
    int m_size;
};

#endif

我缺少什么?我无法修改“abstractbstree.h”

2 个答案:

答案 0 :(得分:2)

尝试:

public AbstractBSTree<T>

编译器将仅在模板体内假设<T>,仅针对模板化类,而不是公共空间

答案 1 :(得分:2)

您错过了<T>

由于AbstractBSTree是一个模板类,因此当您从MyBSTree派生模板参数时需要指定模板参数:

template <typename T>
class MyBSTree:public AbstractBSTree<T>  // <-- Use <T> here
{
    TreeNode<T> * m_root;
    int m_size;
};