定义类的成员函数时出错

时间:2013-06-06 11:00:26

标签: c++

我正在写一个简单的四叉树代码,但我得到了这个错误

#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行

2 个答案:

答案 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替换它。