只是一些简单的错误

Just a few simple errors

本文关键字:错误 简单      更新时间:2023-10-16

我遇到了一些我不知道的错误,并且已经花了很多时间把我的头发拔出。这是我的标题:

#ifndef MYBSTREE_H
#define MYBSTREE_H
#include "abstractbstree.h"
#include "MyBSTreeFunc.h"
using namespace std;
template<typename T>
class TreeNode
{
  public:
    T m_data;
    TreeNode* m_right;
    TreeNode* m_left;
};
template<typename T>
class MyBSTree:public AbstractBSTree<T>       //LINE 18
{
  private:
    TreeNode<T>* m_root;
  public:

    void MyBSTree();
    int size() const;
    bool isEmpty() const;
    int height() const;
    const T& findMax() const;
    const T& findMin() const;
    int contains(const T& x) const;
    void clear();
    void insert(const T& x);
    void remove(const T& x);
    void printPreOrder() const;
    void printPostOrder() const;
    void print() const;     
};
#endif

和我的实现文件:

第1-6行

void MyBSTree()
{
  m_root -> m_data = NULL;
  m_root -> m_right = NULL;
  m_root -> m_left = NULL;
}

行13-21

template<typename T>
bool MyBSTree<T>::isEmpty() const
{
  if (m_root== NULL)
    return true;
  else
    return false;
}

行28-35

template < typename T >
const T& MyBSTree<T>::findMax() const
{
  TreeNode* p = m_root;
  while(p -> m_right != NULL)
    p = p -> m_right;
  return p;
}

实施中的第3行的错误说" m_root"在此范围中没有声明。但是第4和第5行很酷。我猜是因为M_DATA不是指针吗?我不知道。

接下来,第14行和第21行,还有很多其他人说,它希望在'&lt;令牌。我认为它们都是同一问题,所以我只放了一些问题。

最后,它对标题中的第18行说:"模板struct mybstree重新串用为另一种符号"。然后说我实施的第1行是先前的" void mybstree"的声明。我假设这些声明在一起。

感谢您的所有帮助。

您需要修复构造函数声明:

template < typename T >
classMyBSTree
{
  ... // some stuff
public:
  MyBSTree(); // no return type
  ... // some stuff
};

您需要修复构造函数:

template < typename T >
MyBSTree::MyBSTree() // proper ctor definition
{
  m_root -> m_data = T(); // use the initializer for that data type
  m_root -> m_right = NULL;
  m_root -> m_left = NULL;
}

第1-6行:您在名为 void MyBSTree()的.cpp中定义了独立函数。这不是班级的一部分。您的命名与课程相同,这也很糟糕。看起来您希望这是您的构造函数,在这种情况下,您需要此(我不包括模板内容,因为这不是问题):

// in .h
class MyBSTree {
  public:
    MyBSTree(); // No void
}
// in .cpp
// Uses MyBSTree namespace.
MyBSTree::MyBSTree() { /* initialize your pointers etc */ } 

这似乎是您的主要问题,也可能解决其他问题。

  • 编译器无法找到m_roots的原因是因为您的功能不属于类。您可以通过将您的功能放入运算符::(例如myBSTree::myBSTree(){};
  • 来解决此问题。
  • 模板函数不能将其放置在其同类单独的文件中,您需要在相同文件中定义所有模板类和功能。将功能的实现移至标题文件中。