C++ 无法将参数1从Person转换为Person*[]

C++ 无法将参数1从Person转换为Person*[],c++,file,data-structures,binary-tree,C++,File,Data Structures,Binary Tree,我试图制作一个从文件读取并添加到二叉树的程序,但当我试图编译时,我得到一个错误: 错误1“treePersons::display”:无法将参数1从“Node*”转换为“Person*[]” 该错误出现在调用main()中的display()时 #包括 #包括 #包括 使用名称空间std; 结构人{ 国际社会; int生日; 先串; 最后一串; 字符串状态; 双平衡; 人(); Person(整数s、整数b、字符串f、字符串l、字符串t、双a) { 社会的=s; 生日=b; 第一个=f; las

我试图制作一个从文件读取并添加到二叉树的程序,但当我试图编译时,我得到一个错误:

错误1“treePersons::display”:无法将参数1从“Node*”转换为“Person*[]”

该错误出现在调用
main()
中的
display()

#包括
#包括
#包括
使用名称空间std;
结构人{
国际社会;
int生日;
先串;
最后一串;
字符串状态;
双平衡;
人();
Person(整数s、整数b、字符串f、字符串l、字符串t、双a)
{
社会的=s;
生日=b;
第一个=f;
last=l;
状态=t;
平衡=a;
}
};
结构节点{
人员数据;
节点*左;
节点*右;
Node();
节点(人员x){
数据=x;
左=空;
右=空;
}
};
树人类
{
受保护的:
公众:
节点*根;
树人(){
root=NULL;
}
int文件名(个人*数据[])
{
流鳍;
fin.open(“dbfile1.txt”);
如果(!fin.is_open())
cout social>>数据[i]->生日>>数据[i]->第一次>>数据[i]->最后一次>>数据[i]->状态>>数据[i]->平衡;
i++;
}
返回i;
}
无效添加(人员*数据[],节点*根)
{
int i=文件名(数据);
if(root==NULL)
{
根=新节点();
}
对于(int l=0;llast==root->data.last)
{
if(数据[i]->first!=根->数据.first)
{
if(数据[i]->firstdata.first)
{
添加(数据,根->左);
}
else if(数据[i]->first>root->data.first)
{
添加(数据,根->右);
}
else if(data[i]->last==root->data.last&&data[i]->first==root->data.first)
{
cout数据(第一个)
{
添加(数据,根->左);
}
else if(数据[i]->first>root->data.first)
{
添加(数据,根->右);
}
}
}
}
}
按字母顺序无效打印(节点*根)
{
if(root!=NULL)
{
按字母顺序打印(根->左);
cout data.last right);
}
返回;
}
无效显示(人员*数据[],节点*根)
{
添加(数据,根);
按字母顺序打印(根);
};
};
结构状态{
字符串状态;
人员数据;
州*左;
国家*权利;
状态();
州(人x)
{
数据=x;
左=空;
右=空;
}
};
第三类不动产{
受保护的:
状态*根;
公众:
第三产业()
{
root=NULL;
}
};
void main(){
树人T;
T.显示(T.root->data,T.root);
}

很容易看出您的代码有什么问题。您具有以下功能:

treePersons T;
T.display(T.root->data, T.root);
让我们看看什么是
treePersons

class treePersons
{
    Node *root;
    ...
};
struct Node
{
    Person data;
    Node *left;
    Node *right;
    ...
};
它包含一个成员:
节点
节点是:

class treePersons
{
    Node *root;
    ...
};
struct Node
{
    Person data;
    Node *left;
    Node *right;
    ...
};
您的
treePersons::display()
函数具有以下签名:

void display(Person *data[], Node *root)
您正在传递一个
t.root->data
(a
Person
)和
t.root
(a
节点*

问题是您试图将
人员
作为
人员*[]
传递,这是不可能发生的。没有办法把
变成
人[]
,你可能想让
显示
拿一个
人*
指针,这将允许你传递一个
人的容器:
无效显示(人*数据,节点*根)

当然,正如@R Sahu在评论中指出的那样,这样做会让你陷入一系列问题中(你的大多数函数都需要一个
Person*[]
。这里的解决方案是重新思考你在做什么,正如@R Sahu所建议的那样,从做大做小,然后从那里构建你的程序


考虑在需要容器时使用,或者在需要指针的地方使用(否则!)。也要阅读(真正的阅读)编译器输出。它告诉你问题是什么,你只需要阅读

代码中有太多的问题。我的建议:在网上完成一些教程或教科书中的练习。就发布的程序而言,我建议从小处开始,确保它工作正常,然后继续添加更多代码。你能指出需要修复的内容?