求大神!关于IO 输出运算符重载 这是什么错误 怎么改?

#include"iostream"
#include"fstream"
#include"string"
using namespace std;

class coStu
{
protected:
string name,num;
double score;
public:
coStu(string na,string nu,double s):
name(na),num(nu),score(s){}
friend ostream & operator<<(ostream &out, coStu &obj);
};

ostream & operator<<(ostream &out, coStu &obj)
{
out<<obj.name<<"\t"<<obj.num<<"\t"<<obj.score<<"\t";
return out;
}

class master:public coStu
{
private:
string teacherName;
public:
master(string na,string nu,double s,string tn):
teacherName(tn),coStu(na,nu,s){}
};

void main()
{
coStu c("张三","134679",89);
master m("李四","316497",79,"丁老师");
}

运行没有错误啊。你那里有什么错误?

 void main()
{
    coStu c("张三","134679",89);
    master m("李四","316497",79,"丁老师");
    cout<<c<<endl;
    cout<<m<<endl;
}
 void main()
{
    coStu c("张三","134679",89);
    master m("李四","316497",79,"丁老师");

    ofstream file("file.txt",ios::out|ios::ate);
    if(!file)
    {
        cout<<"不可以打开文件"<<endl;
        exit(1);
    }
//写文件
    file<<"hello c++!\n"<<c<<endl<<m<<endl;
//关闭文件
    file.close();

}

#include"iostream"
#include"fstream"
#include"string"
using namespace std;
class coStu
{
protected:
string name,num;
double score;
public:
coStu(string na,string nu,double s):
name(na),num(nu),score(s){}
friend ostream & operator<<(ostream &out, coStu &obj);
};
ostream & operator<<(ostream &out, coStu &obj)
{
out<<obj.name<<"\t"<<obj.num<<"\t"<<obj.score<<"\t";
return out;
}
class master:public coStu
{
private:
string teacherName;
public:
master(string na,string nu,double s,string tn):
teacherName(tn),coStu(na,nu,s){}
};
void main()
{
coStu c("张三","134679",89);
master m("李四","316497",79,"丁老师");
}