友元函数不是能访问类的私有数据吗,怎么在这儿好像不行了,我不是很清楚是不是这个原因导致的错误,请高手指点迷津,谢谢!!!!!
附原程序如下:
#include<iostream>
using namespace std;
template<class type>class Seqlist{
public:
Seqlist(int MaxSize=defaultSize);
    ~Seqlist(){delete []data;}
int Length()const{return last+1;}
int Find(type&x);
int IsIn(type &x);
int Insert(type &x,int i);
int Remove(type &x);
int Next(type &x);
int Prior(type &x);
int IsEmpty(){return last==-1;}
int IsFull(){return last==MaxSize-1;}
type Get(int i){return i<0||i>last?NULL:data[i];}
friend ostream &operator << (ostream &out, Seqlist<type> &sq);private:
type *data;
int MaxSize;
int last;
};template<class type>Seqlist<type>::Seqlist(int sz){
if(sz>0){
MaxSize=sz;
last=-1;
data=new type[MaxSize];
}
}template<class type>int Seqlist<type>::Find(type&x){
   int i=0; 
   while(i<=last&&data[i]!=x)i++;
   if(i>last)return -1;
   else return i;     
}template<class type>int Seqlist<type>::IsIn(type&x){
int i=0,found=0;
while(i<=last&&!found)
if(data[i]!=x)i++;
else found=1;
return found;
}template<class type>int Seqlist<type>::Insert(type&x,int i){
if(i<0||i>last+1||last==MaxSize-1)return 0;
else{
last++;
for(int j=last;j>i;j--)data[j]=data[j-1];
data[i]=x;
return 1;
}
}template<class type>int Seqlist<type>::Remove(type&x){
int i=Find(x);
if(i>=0){
last--;
for(int j=i;j<=last;j++)data[j]=data[j+1];
return 1;
}
return 0;
}template<class type>int Seqlist<type>::Next(type&x){
int i=Find(x);
if(i>=0&&i<last)return i+1;
else return -1;
}template<class type>int Seqlist<type>::Prior(type&x){
int i=Find(x);
if(i>0&&i<=last)return i-1;
else return -1;
}template <class type>ostream & operator << (ostream &out, Seqlist<type> &sq){
for(int i=0;i<sq.last+1;i++)
out<<sq.Get(i)<<' ';
out<<endl;
return out;
}#include "seqlistclass.h"int main()
{   int a[]={654,321,683,684,498,3354,687,36,689,326};
Seqlist<int>list(200);
for(int i=0;i<10;i++)
{
list.Insert(*a,i);
*a=*(a+i+1);
}
cout<<list;
cout<<list.Length()<<endl;
//for(int j=0;j<list.Length();j++)
//{
//cout<<list.Get(j)<<' ';
//}
//cout<<endl;
return 0;
}
用VC6.0编译出现错误如下:
seqlistclass.h(81) : error C2248: 'last' : cannot access private member declared in class 'Seqlist<int>'
        c:\documents and settings\administrator\桌面\顺序表\seqlistclass.h(22) : see declaration of 'last'
        C:\Documents and Settings\Administrator\桌面\顺序表\顺序表.cpp(11) : see reference to function template instantiation 'class std::basic_ostream<char,struct std::char_traits<char> > &__cdecl operator <<(class std::basic_ostream<char,struct st
d::char_traits<char> > &,class Seqlist<int> &)' being compiled
Error executing cl.exe.