Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 只是一些简单的错误_C++_Binary Search Tree - Fatal编程技术网

C++ 只是一些简单的错误

C++ 只是一些简单的错误,c++,binary-search-tree,C++,Binary Search Tree,我遇到了一些我不知道的错误,并且花了很多时间来解决这些错误。这是我的标题: #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; Tr

我遇到了一些我不知道的错误,并且花了很多时间来解决这些错误。这是我的标题:

#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
第13-21行

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

  else
    return false;
}
模板
bool MyBSTree::isEmpty()常量
{
if(m_root==NULL)
返回true;
其他的
返回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;
}
模板
常量T&MyBSTree::findMax()常量
{
TreeNode*p=m_根;
while(p->m_right!=NULL)
p=p->m_右;
返回p;
}
实现中第3行的错误表示“m_root”未在此范围内声明。但是第4行和第5行很酷。我猜是因为m_数据不是指针?我不知道


接下来,第14行和第21行,以及许多其他行都说,它希望在“之前有一个初始值设定项,您需要修复构造函数声明:

template < typename T >
classMyBSTree
{
  ... // some stuff
public:
  MyBSTree(); // no return type
  ... // some stuff
};
模板
类MyBStree
{
…一些东西
公众:
MyBSTree();//无返回类型
…一些东西
};
您还需要修复您的构造函数:

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;
}
模板
MyBSTree::MyBSTree()//正确的构造函数定义
{
m_root->m_data=T();//使用该数据类型的初始值设定项
m_root->m_right=NULL;
m_root->m_left=NULL;
}

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

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

  • 编译器找不到m_根的原因是因为您的函数不是类的一部分。您可以通过将函数放入带有运算符::(例如,
    myBSTree::myBSTree(){};
    )的类作用域来解决此问题
  • 模板函数不能放置在与其类不同的文件中,您需要在相同的文件中定义所有模板类和函数。将函数的实现移到头文件中

@JonathonReinhart我没有意识到。谢谢你的链接。
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;
}
// in .h
class MyBSTree {
  public:
    MyBSTree(); // No void
}
// in .cpp
// Uses MyBSTree namespace.
MyBSTree::MyBSTree() { /* initialize your pointers etc */ }