我有以下代码:
#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()
未定义。为什么?我在课堂上宣布了它。
答案 0 :(得分:0)
在结构节点定义
之外移动“void Print(node * p)”函数答案 1 :(得分:0)
void打印(节点* p){ - &gt; 静态无效打印(节点* p){
否则if(p-&gt; right){ - &gt; 如果(对GT;右){强>
打印(root); - &gt;的节点::打印(根目录); 强>
答案 2 :(得分:0)
您有两种打印方式:
BST::node::Print(node* p);
BST::print();
Capital Print
是node
结构的一部分。小写print
是BST
类的一部分。
您可能遇到的问题:
print
。您需要致电:BST bt; bt.print();
Print
课程之外调用node
。你需要打电话给node n; n.Print(&n);
这会有些愚蠢。如果Print
类node
成为node
类,则Print()
不需要print()
。Print(node*)
- 没有这样的事情。 {{1}}和{{1}} - 大写问题很重要。如果这不能回答您的问题,请通过更多信息更新您的问题。复制并粘贴实际的编译器错误,并指出哪一行会给您错误。