Если вам действительно нужно открывать файл каждый раз, когда вы вызываете wrte()
, я бы изменил код, чтобы закрыть текущий поток, прежде чем снова вызвать рекурсивный вызов write:
if(p)
{
...
out << reg.ID <<'\t'<<reg.name<<'\t'<<reg.surname<<'\t'<<endl;
out.close();
wrte(p->left);
wrte(p->right);
...
Тем не менее, лучшим вариантом было бы передать ostream
вашей функции wrte()
:
void tree::wrte(ostream& out, person *p){
...
if(p)
{
...
out << reg.ID <<'\t'<<reg.name<<'\t'<<reg.surname<<'\t'<<endl;
wrte(out, p->left);
wrte(out, p->right);
}
...
}
Затем откройте поток вывода перед вашим первым вызовом wrte()
:
int main()
{
...
ofstream out("myfile.txt");
...
tree_ptr->wrte(out, p);
out.close();
...
}