请问代码重用的一个试例

请教代码重用的一个试例
//以下是一个包含对象成员的类的度例
//但编译时总有两条错误,
//请大家帮忙看看
//这是一个studentc.h文件


#ifndef STUDENTC_H
#define STUDENTC_H

#include<iostream>
#include<cstring>
#include<valarray>
//using namespace std;

class Student
{
private:
typedef std::valarray<double> ArrayDb;//定义一个类型
std::string name;//string类的name 对象
ArrayDb scores;//arraydb类的scores对象
std::ostream & arr_out(std::ostream & os)const;//定义了个输出
public:
//下面为几个构造函数:
Student():name("Null name"),scores(){}
Student(const std::string & s):name(s),scores(){}
explicit Student(int n):name("Nully"),scores(n){}
Student(const std::string & s,int n)
:name(s),scores(n){}
Student(const std::string & s,const ArrayDb & a)
:name(s),scores(a){}
Student(const char *str,const double *pd,int n)
:name(str),scores(pd,n){}
~Student(){}
double Average()const;//求平均成绩
const std::string & Name()const;
double & operator[](int i);
double operator[](int i)const;
//friends
//input
friend std::istream & operator>>(std::istream & is,
Student & stu);
friend std::istream & getline(std::istream & is,
Student & stu);
//output
friend std::ostream & operator<<(std::ostream & os,
const Student & stu);


};
#endif







//这是类的实现student.cpp文件

//student.cpp___student class using containment
#include"studentc.h"
using std::ostream;
using std::endl;
using std::istream;
using std::string;


//public methods
double Student::Average()const
{
if(scores.size()>0)
return scores.sum()/scores.size();
else
return 0;
}
const string & Student::Name()const
{
return name;
}
double & Student::operator [](int i)
{
return scores[i];
}
double Student::operator [](int i)const
{
return scores[i];
}
//private method
ostream & Student::arr_out(ostream & os)const
{
int i;
int lim=scores.size();
if(lim>0)
{
for(i=0;i<lim;i++)
{
os<<scores[i]<<" ";
if(i%5==4)
os<<endl;
}
if(i%5!=0)
os<<endl;
}
else
os<<"empty array";
return os;
}
//friends

//use string version of operator>>()
istream & operator>>(istream & is,Student & stu)
{
is>>stu.name;
return is;
}
//use string friend getline(ostream &,const string &)
istream & getline(istream & is,Student & stu)
{
getline(is,stu.name);
return is;
}
//use string version of operator<<()
ostream & operator<<(ostream & os,const Student & stu)
{
os<<"Scores for"<<stu.name<<":\n";
stu.arr_out(os);//use private method for scores 
return os;
}







//以下是用以测试的use_stuc.cpp文件

#include<iostream>
#include"studentc.h"
using std::cin;
using std::cout;
using std::endl;
//using namespace std;

void set(Student & sa,int n);

const int pupils=3;
const int quizzes=5;

int main()
{
Student ada[pupils]=
{Student(quizzes),Student(quizzes),Student(quizzes)};

int i;
for(i=0;i<pupils;)
set(ada[i],quizzes);
cout<<"\nStudent List:\n";
for(i=0;i<pupils;++i)
cout<<ada[i].Name()<<endl;
cout<<"\nResults:";
for(i=0;i<pupils;++i)
{
cout<<endl<<ada[i];