我正在写一个简单的四叉树代码,但我得到了这个错误
#include<iostream>
class qtree
{
struct node
{
node *left1;node *left2;
char data;
node *right1;node *right2;
}*root;
char *arr;
int *lc1;int *lc2;int *rc1;int *rc2;
public:
qtree(char *a,int *l1,int *l2,int *r1,int *r2,int size);
void insert(int index);
static node* buildtree(char *a,int *l1,int *l2,int *r1,int *r2,int index);
void display();
static void inorder(node *sr);
~qtree();
static void del(node *sr);
};
qtree::qtree(char *a,int *l1,int *l2,int *r1,int *r2,int size)
{
root = NULL;
arr = new char[size];
lc1 = new int[size];lc2 = new int[size];rc1 = new int[size];rc2 = new int[size];
for(int i=0;i<size;i++)
{
*(arr+i)=*(a+i);
*(lc1+i)=*(l1+i);*(lc2+i)=*(l2+i);
*(rc1+i)=*(r1+i);*(rc2+i)=*(r2+i);
}
}
void qtree::insert(int index)
{
root = buildtree(arr,lc1,lc2,rc1,rc2,index);
}
node* qtree :: buildtree(char *a,int *l1,int *l2,int *r1,int *r2,int index) //LINE 45
{
node* temp =NULL;
if(index!=-1)
{
temp = new node;
temp->left1 = buildtree(a,l1,l2,r1,r2,*(l1+index));
temp->left2 = buildtree(a,l1,l2,r1,r2,*(l2+index));
temp->data = *(a+index);
temp->right1 = buildtree(a,l1,l2,r1,r2,*(r1+index));
temp->right2 = buildtree(a,l1,l2,r1,r2,*(r2+index));
}
return temp;
}
void qtree::display()
{
inorder(root);
}
void qtree::inorder(node *sr)
{
if(sr!=NULL)
{
inorder(sr->left1);
inorder(sr->left2);
cout<<sr->data<<"\t";
inorder(sr->right1);
inorder(sr->right2);
}
}
qtree::~qtree()
{
delete arr;
delete lc1;
delete lc2;
delete rc1;
delete rc2;
del(root);
}
void qtree::del(node *sr)
{
if(sr!=NULL)
{
del(sr->left1);
del(sr->left2);
del(sr->right1);
del(sr->right2);
}
delete sr;
}
void main()
{
char a[] = {'A','B','C','D','E','F','G','H','I'};
int l1[] = {1,5,-1,-1,-1,-1,-1,-1,-1};
int l2[] = {2,6,-1,-1,-1,-1,-1,-1,-1};
int r1[] = {3,7,-1,-1,-1,-1,-1,-1,-1};
int r2[] = {4,8,-1,-1,-1,-1,-1,-1,-1};
int sz = sizeof(a);
qtree qt(a,l1,l2,r1,r2,sz);
qt.insert(0);
cout<<"\nThe elements are"<<endl;
qt.display();
}
ERROR- quad_tree.cpp:45:错误:'*'标记之前的预期构造函数,析构函数或类型转换
可能是什么问题?
P.S :我评论了第45行
答案 0 :(得分:0)
node* qtree :: buildtree(char *a,int *l1,int *l2,int *r1,int *r2,int index) //LINE 45
范围内没有node
的定义。你想要qtree::node
。
答案 1 :(得分:0)
您的结构节点仅在qtree类中定义。
如果你想在qtree的方法之外使用它,你应该在它之外定义它。
否则你可以使用oli的建议
qtree:node* qtree::buildtree()
试试这个:
#include<iostream>
using namespace std;
struct node {
node *left1;
node *left2;
char data;
node *right1;
node *right2;
};
class qtree {
struct node* root;
char *arr;
int *lc1;
int *lc2;
int *rc1;
int *rc2;
public:
qtree(char *a,int *l1,int *l2,int *r1,int *r2,int size);
void insert(int index);
static node* buildtree(char *a,int *l1,int *l2,int *r1,int *r2,int index);
void display();
static void inorder(node *sr);
~qtree();
static void del(node *sr);
};
qtree::qtree(char *a,int *l1,int *l2,int *r1,int *r2,int size) {
root = NULL;
arr = new char[size];
lc1 = new int[size];
lc2 = new int[size];
rc1 = new int[size];
rc2 = new int[size];
for(int i=0; i<size; i++) {
*(arr+i)=*(a+i);
*(lc1+i)=*(l1+i);
*(lc2+i)=*(l2+i);
*(rc1+i)=*(r1+i);
*(rc2+i)=*(r2+i);
}
}
void qtree::insert(int index) {
root = buildtree(arr,lc1,lc2,rc1,rc2,index);
}
node* qtree :: buildtree(char *a,int *l1,int *l2,int *r1,int *r2,int index) { //LINE 45
node* temp =NULL;
if(index!=-1) {
temp = new node;
temp->left1 = buildtree(a,l1,l2,r1,r2,*(l1+index));
temp->left2 = buildtree(a,l1,l2,r1,r2,*(l2+index));
temp->data = *(a+index);
temp->right1 = buildtree(a,l1,l2,r1,r2,*(r1+index));
temp->right2 = buildtree(a,l1,l2,r1,r2,*(r2+index));
}
return temp;
}
void qtree::display() {
inorder(root);
}
void qtree::inorder(node *sr) {
if(sr!=NULL) {
inorder(sr->left1);
inorder(sr->left2);
cout<<sr->data<<"\t";
inorder(sr->right1);
inorder(sr->right2);
}
}
qtree::~qtree() {
delete arr;
delete lc1;
delete lc2;
delete rc1;
delete rc2;
del(root);
}
void qtree::del(node *sr) {
if(sr!=NULL) {
del(sr->left1);
del(sr->left2);
del(sr->right1);
del(sr->right2);
}
delete sr;
}
int main() {
char a[] = {'A','B','C','D','E','F','G','H','I'};
int l1[] = {1,5,-1,-1,-1,-1,-1,-1,-1};
int l2[] = {2,6,-1,-1,-1,-1,-1,-1,-1};
int r1[] = {3,7,-1,-1,-1,-1,-1,-1,-1};
int r2[] = {4,8,-1,-1,-1,-1,-1,-1,-1};
int sz = sizeof(a);
qtree qt(a,l1,l2,r1,r2,sz);
qt.insert(0);
cout<<"\nThe elements are"<<endl;
qt.display();
return 0;
}
另外:您已经忘记使用命名空间std ,因为您稍后使用cout。使用它或用std :: cout替换它。