gpt4 book ai didi

C++ 模板二叉搜索树 - 参数列表错误

转载 作者:行者123 更新时间:2023-11-30 00:44:48 24 4
gpt4 key购买 nike

我想要的是一个相当简单的二叉搜索树,通过模板标签,允许在其中使用任何数字数据,但我有一些相当令人讨厌的问题,我不知道如何摆脱,如果有人可以提供帮助,将不胜感激。不断弹出的错误消息是“在没有参数列表的情况下无效使用模板名称‘BST’”——坦率地说,我不知道如何解决它。它出现在 bst.cpp 文件的第 31、89、105、120、130、141 行。鉴于我在二叉搜索树方面并不那么精通,我更喜欢尽可能确定的答案(甚至尽可能准确地提及需要更改的地方和内容):

main.cpp

#include <iostream>
#include "bst.h"

using namespace std;

int main()
{

BST <int> tree;
tree.insert(8);
tree.insert(25);
tree.insert(99);
tree.insert(20);
tree.insert(25);
tree.insert(20);
tree.insert(2);
tree.insert(89);
tree.insert(15);
tree.insert(10);
tree.insert(30);
tree.insert(50);
tree.displayorder();



int number;

int Inputnumber;
while (true){
cout << "Choose what you want to do: " << endl << "1# Insert" << endl << "2# Display Orders" << endl << "3# Search" << endl << "4# Delete" << endl << endl << endl;
cin >> Inputnumber;
if (Inputnumber==1){
cout << endl << "Enter the number you want inserted: ";
cin >> number;
tree.insert(number);
cout << endl << endl << endl;
}
if (Inputnumber==2){
cout<<"Display Orders: " << endl;
tree.displayorder();
cout << endl << endl << endl;
}

if (Inputnumber==3){
cout<<"Enter the number you want to search for: ";
cin >> number;
tree.search(number);
cout << endl << endl << endl;
}
if (Inputnumber==4){
cout << "Enter the number you want to remove: ";
cin >> number;
tree.remove(number);
cout << endl << endl << endl;
}
}
}

BST.cpp

#include <iostream>
#include "bst.h"

using namespace std;

template <class T>
void BST<T>::preorder(node* tree)
{
if(tree == NULL){
return;
}
cout << tree->data << " ";
inorder(tree->left);
inorder(tree->right);
}



template <class T>
void BST<T>::postorder(node* tree)
{
if(tree == NULL){
return;
}
inorder(tree->left);
inorder(tree->right);
cout << tree->data << " ";
}

template <typename T>
BST::node* BST<T>::find(node* tree, T x) //ERROR HERE
{
if(tree == NULL)
return NULL;
else if(x < tree->data)
return find(tree->left, x);
else if(x > tree->data)
return find(tree->right, x);
else
return tree;
}
template <typename T>
BST<T>::BST()
{
root = NULL;
}

template <typename T>
BST<T>::~BST()
{
root = makeEmpty(root);
}

template <class T>
void BST<T>::insert(T x)
{
root = insert(x, root);
}

template <class T>
void BST<T>::remove(T x)
{
root = remove(x, root);
}

template <class T>
void BST<T>::displayorder()
{
inorder(root);
cout << endl;
preorder(root);
cout << endl;
postorder(root);
cout << endl << endl;
}

template <class T>
void BST<T>::search(T x)
{
if(root = find(root, x)){
cout << endl << "Found!" << endl;
}
else{
cout << endl << "Not Found!" << endl;
}
}

template <class T>
BST::node* BST<T>::makeEmpty(node* tree) //ERROR HERE
{
if(tree == NULL)
return NULL;
{
makeEmpty(tree->left);
makeEmpty(tree->right);
delete tree;
}
return NULL;
}




template <class T>
BST::node* BST<T>::insert(T x, node* tree) //ERROR HERE
{
if(tree == NULL)
{
tree = new node;
tree->data = x;
tree->left = tree->right = NULL;
}
else if(x < tree->data)
tree->left = insert(x, tree->left);
else if(x >= tree->data)
tree->right = insert(x, tree->right);
return tree;
}

BST::node* BST::findMin(node* tree) //ERROR HERE
{
if(tree == NULL)
return NULL;
else if(tree->left == NULL)
return tree;
else
return findMin(tree->left);
}

BST::node* BST::findMax(node* tree) //ERROR HERE
{
if(tree == NULL)
return NULL;
else if(tree->right == NULL)
return tree;
else
return findMax(tree->right);
}

template <typename T>
BST::node* BST<T>::remove(T x, node* tree) //ERROR HERE
{
node* temp;
if(tree == NULL)
return NULL;
else if(x < tree->data)
tree->left = remove(x, tree->left);
else if(x > tree->data)
tree->right = remove(x, tree->right);
else if(tree->left && tree->right)
{
temp = findMin(tree->right);
tree->data = temp->data;
tree->right = remove(tree->data, tree->right);
}
else
{
temp = tree;
if(tree->left == NULL)
tree = tree->right;
else if(tree->right == NULL)
tree = tree->left;
delete temp;
}

return tree;
}

template <class T>
void BST<T>::inorder(node* tree)
{
if(tree == NULL){
return;
}
inorder(tree->left);
cout << tree->data << " ";
inorder(tree->right);
}

BST.h

#ifndef BST_H
#define BST_H


template <class T>
class BST
{
struct node
{
T data;
node* left;
node* right;
};

node* root;

node* makeEmpty(node* tree);

node* insert(T x, node* tree);

node* findMin(node* tree);

node* findMax(node* tree);

node* remove(T x, node* tree);

void inorder(node* tree);

void preorder(node* tree);



void postorder(node* tree);


public:
BST();

~BST();


node* find(node* tree, T x);

void insert(T x);

void remove(T x);

void displayorder();

void search(T x);
};

#endif // BST_H

最佳答案

例如,在

BST::node* BST<T>::find(node* tree, T x) 

你忘记了 <T>第一个组件 BST .

应该是

// vvv
BST<T>::node* BST<T>::find(node* tree, T x)

所有其他错误都属于同一类型。

关于C++ 模板二叉搜索树 - 参数列表错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com