C++ 继承问题-在';{';代币

C++ 继承问题-在';{';代币,c++,inheritance,compiler-errors,C++,Inheritance,Compiler Errors,因此,我得到的这个错误与我的AVLTree类继承我的BTree类的方式有关。据我所知,编译器的行为好像找不到BTree.h(在同一目录中)或者不喜欢我包含它的方式 我一直在网上四处寻找,但我看到的这个问题的大多数例子都涉及到某人忘记包含某些内容,所以我不确定下一步该怎么办 编辑:我还为BTree.h添加了代码示例 任何帮助都将不胜感激 g++-g-w-Wall TreeTest.cpp BTree.h BinaryTree.h AVLTree.h-o 文件中的测试树包含在TreeTest.cpp

因此,我得到的这个错误与我的AVLTree类继承我的BTree类的方式有关。据我所知,编译器的行为好像找不到BTree.h(在同一目录中)或者不喜欢我包含它的方式

我一直在网上四处寻找,但我看到的这个问题的大多数例子都涉及到某人忘记包含某些内容,所以我不确定下一步该怎么办

编辑:我还为BTree.h添加了代码示例

任何帮助都将不胜感激

g++-g-w-Wall TreeTest.cpp BTree.h BinaryTree.h AVLTree.h-o 文件中的测试树包含在TreeTest.cpp:12:0:AVLTree.h:22:29: 错误:函数中“{”标记TreeTest.cpp:之前应为类名

代码如下:

#ifndef AVLTree_H
#define AVLTree_H

#include <vector>
#include <iostream>
#include "BTree.h"

using std::vector;
using std::cout;
using std::string;

template <class T>
class AVLTree : public BTree{
    public:
        struct TreeNode{
            TreeNode * leftChild, 
                 * rightChild;
            T key;
            vector<T> data;
            int size;
            int height;
            bool deleted;
        };

        //Standard tree functions
        AVLTree();
        virtual ~AVLTree();
        virtual bool isEmpty();
        virtual int getSize();
        virtual int getHeight();
        virtual int insert(T key, T data); //returns number of insert calls
        virtual int remove(T key);         //returns number of remove calls
        virtual int contains(T key);       //removes number of contains calls, or 0 if doesn't exist
        virtual std::vector<T> getData(T key);

        //Special functions
        virtual void displayAll();
        virtual double getAverageDepth(); 
        virtual int getTotalIPL();  //Retrieves internal path length from root

    private: 
        int size;
        TreeNode * root;

        int * contains(T key, TreeNode * node, int calls);
        int insert(T key, T data, TreeNode *& node, int calls);
        int remove(T key, TreeNode *& node, int calls);
        int getDepth(TreeNode*curr, int total);
        int getIPL(TreeNode * start, int level);
        void rotateLeft(TreeNode *& node);
        void doubleLeft(TreeNode *& node);
        void rotateRight(TreeNode *& node);
        void doubleRight(TreeNode *& node);
        int max(int a, int b);
        int getHeight( TreeNode * t );
        void display(TreeNode * node, string indent, bool last);
        TreeNode * makeNode(T key, T data);
        TreeNode * getNode(T key, TreeNode * node);
        void destroySubTree(TreeNode * start);
};
\ifndef AVLTree\u H
#定义AVLTree_H
#包括
#包括
#包括“BTree.h”
使用std::vector;
使用std::cout;
使用std::string;
模板
类AVLTree:公共BTree{
公众:
树状结构{
TreeNode*leftChild,
*右孩;
T键;
矢量数据;
整数大小;
内部高度;
删除bool;
};
//标准树函数
AVLTree();
虚拟~AVLTree();
虚拟布尔为空();
虚拟int getSize();
虚拟int getHeight();
virtual int insert(T key,T data);//返回插入调用的数量
virtual int remove(T key);//返回移除调用的数量
virtual int contains(T key);//删除contains调用的数量,如果不存在,则删除0
虚拟std::向量getData(T键);
//特殊功能
虚拟void displayAll();
虚拟双getAverageDepth();
virtual int getTotalIPL();//从根目录检索内部路径长度
私人:
整数大小;
树根;
int*包含(T键,TreeNode*节点,int调用);
int insert(T键、T数据、TreeNode*&节点、int调用);
int-remove(T键、TreeNode*&节点、int调用);
int getDepth(树节点*当前,int总计);
int getIPL(树节点*开始,int级别);
void rotateLeft(树节点*&node);
void doubleLeft(TreeNode*&节点);
void rotateRight(TreeNode*&节点);
void doubleRight(TreeNode*&节点);
int max(int a,int b);
int getHeight(TreeNode*t);
无效显示(TreeNode*节点、字符串缩进、bool last);
TreeNode*makeNode(T键,T数据);
TreeNode*getNode(T键,TreeNode*node);
子树(树节点*开始);
};
这里是BTree.h:

#ifndef bTree_H
#define bTree_H

#include <vector>

template <class T>
class BTree{
    public:
        struct TreeNode{
            TreeNode * leftChild, 
                 * rightChild;
            T key;
            std::vector<T> data;
            int size;
        };

        //Standard tree functions
        virtual ~BTree();
        virtual bool isEmpty() = 0;
        virtual int getSize() = 0;
        virtual int getHeight() = 0;
        virtual int insert(T key, T data) = 0; //returns number of insert calls
        virtual int remove(T key) = 0;         //returns number of remove calls
        virtual int contains(T key) = 0;        
        virtual std::vector<T> getData(T key) = 0;

        //Special functions
        virtual void displayAll() = 0;
        virtual double getAverageDepth() = 0; 
        virtual int getTotalIPL() = 0;  //Retrieves internal path length from root

    private: 
        int size;
        TreeNode * root;

};

template <class T> 
BTree<T>::~BTree<T>(){}

#endif
\ifndef bTree\u H
#定义树
#包括
模板
B类树{
公众:
树状结构{
TreeNode*leftChild,
*右孩;
T键;
std::矢量数据;
整数大小;
};
//标准树函数
虚拟~BTree();
虚拟布尔为空()=0;
虚拟int getSize()=0;
虚拟int getHeight()=0;
virtual int insert(T key,T data)=0;//返回插入调用的数量
virtual int remove(T key)=0;//返回移除调用的数量
虚拟整数包含(T键)=0;
虚拟std::vector getData(T键)=0;
//特殊功能
虚拟void displayAll()=0;
虚拟双getAverageDepth()=0;
virtual int getTotalIPL()=0;//从根目录检索内部路径长度
私人:
整数大小;
树根;
};
模板
BTree::~BTree(){}
#恩迪夫

由于BTree是一个类模板,您不能直接从它继承,但必须指定它的实例化。也就是说,您必须提供模板参数,在您的情况下,模板参数应该与AVLTree实例化时的类型相同

template <class T>
class AVLTree:public BTree<T>
模板
类AVLTree:公共BTree

那么,它指向哪一行?AVLTree.h:22:29:错误:在“{”标记之前应该有类名。在第22行,我写了“class AVLTree:public BTree{”你能显示BTree.h的内容吗?我继续在上面添加了BTree.h。我认为你需要从BTree继承,因为BTree是一个类模板