#c #binary-tree
#c #двоичное дерево
Вопрос:
У меня есть следующий код:
#include <iostream>
using namespace std;
class BST{
public:
int n,*v,vn;
struct node {
int val;
node *left,*right;
node (int v){ val=v; left=right=0;}
void Print(node *p){
cout<<p->val;
if (p->left){
Print(p->left);
}
else if(p->right){
Print(p->right);
}
}
}; node *root;
node *rinsert(node *p,int t){
if (p==0){
p=new node(t);
n ;
}
else if (t<p->val){
p->left=rinsert(p->left,t);
}
else if (t>p->val){
p->right=rinsert(p->right,t);
}
return p;
}
void traverse(node *p){
if (p==0) return;
traverse(p->left);
v[vn ]=p->val;
traverse(p->right);
}
void print(){
Print(root);
}
public:
BST(int maxelms,int maxval){
root=0;
n=0;
}
int size(){
return n;
}
void insert(int v){
root=rinsert(root,v);
}
void report(int *x){
v=x;
vn=0;
traverse(root);
}
};
int main(){
BST bt(12,25);
bt.insert(12);
bt.insert(10);
bt.insert(25);
bt.insert(7);
bt.insert(11);
bt.insert(8);
bt.insert(4);
bt.insert(3);
bt.insert(20);
bt.insert(23);
bt.insert(24);
bt.insert(1);
return 0;
}
Компилятор говорит, что Print()
это не определено. Почему? Я объявил его внутри класса.
Комментарии:
1. Я думаю, что в функции «print» функция «Print» недоступна без указания имени структуры.
2. Если у вас есть сообщение об ошибке компилятора, которое вы не понимаете, поместите все сообщение об ошибке в свой вопрос (и укажите строку, на которую оно жалуется в вашем исходном коде).
Ответ №1:
переместите вашу функцию «void Print (node * p)» за пределы определения узла структуры
Ответ №2:
пустая печать (узел * p){ —> статическая пустая печать (узел * p){
else if(p->right){ —> if(p->right){
Печать (корень); —> узел::Печать (корень);
Ответ №3:
У вас есть два метода печати:
BST::node::Print(node* p);
BST::print();
Капитал Print
является частью node
структуры. Нижний регистр print
является частью BST
класса.
Проблемы, с которыми вы можете столкнуться:
- вызов
print
вне класса. Вам нужно будет вызвать:BST bt; bt.print();
- вызов
Print
внеnode
класса. Вам нужно было бы вызватьnode n; n.Print(amp;n);
, что было бы несколько глупо. Нет необходимостиPrint
быть частьюnode
класса, если он принимает вnode
. - вызов
Print()
— такой вещи не существует. Тамprint()
иPrint(node*)
— заглавные буквы имеют значение.
Если это не отвечает на ваш вопрос, пожалуйста, обновите свой вопрос дополнительной информацией. Скопируйте и вставьте фактическую ошибку компилятора и укажите, какая строка выдает ошибку.
Комментарии:
1. @user466534, затем отправьте сообщение об ошибке и укажите строку проблемы. В противном случае мы не сможем вам помочь.