C++关于顺序串类的有关问题~

C++关于顺序串类的问题~~!~小弟编写了一个顺序串类,发现有一个错误却无法解决~~~~请大虾们帮帮忙~~~自编的

C++关于顺序串类的问题~~!~
小弟编写了一个顺序串类,发现有一个错误却无法解决~~~~请大虾们帮帮忙~~~

自编的String类:
/////////String.h//////////////
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
class String
{
private:
char *str; /////串
int size; ///////当前长度
int maxSize; //////最大字符个数
void GetNext(const String& t,int next[])const; 
int KMPFind(const String& t,int start,int next[])const; //////KMP算法查找
public:
String(char *s=" "); /////构造函数1
String(int max); /////构造函数2
String(const String &s); /////拷贝构造函数
~String(void); /////析构函数
void Insert(int pos,char *t); /////插入
void Delete(int pos,int length); //////删除
String SubStr(int pos,int length); /////取字串

char& operator[](int n); ///////操作符[]重载
String& operator = (const String& s); /////////操作符=重载1
  String& operator = (char *s); //////////操作符=重载2
friend ostream& operator << (ostream& ostr,const String& s);//////操作符<<重载,定义为友元函数
friend istream& operator >> (istream& istr,String& s); ///////操作符>>重载,定义为友元函数
int operator == (const String& s)const; ////////操作符==重载1
int operator ==(char *s)const; ////////操作符==重载2
friend int operator == (char *strL,const String& strR); //////////操作符==重载3,定义为友元函数
};

String::String(char *s) //构造函数1,定义对象并赋初始串值
{
size=strlen(s);
maxSize=size+1;
str=new char[maxSize];
strcpy(str,s);
}
String::String(int max) //构造函数2,定义对象并置最大字符个数
{
maxSize=max;
size=0;
str=new char[maxSize];
}
String::String(const String &s) //构造函数2,定义对象并拷贝赋值
{
maxSize=s.maxSize;
size=s.size;
str=new char[maxSize];

for(int i=0;i<maxSize;i++)
str[i]=s.str[i];
}
String::~String(void)
{
delete []str;
}
void String::Insert(int pos,char *t) ////插入
{
int length=strlen(t);
int i;

if(pos>size||pos<0)
{
cout<<"插入位置参数错!";
return;
}

if(size+length>=maxSize-1)
{
char *p=str;
str=new char[size+length+1]; //重新申请更大的内存空间
for(i=0;i<=size;i++)  
str[i]=p[i]; ///原串值赋值
delete []p; /////释放原内存空间
}
//从size至pos逐位右移字符以空出插入字符的位置
for(i=size;i>=pos;i--)
str[i+length]=str[i];
//从pos到pos+length
for(i=0;i<length;i++)
str[pos+i]=str[i];


maxSize=size+length+1;
size=size+length;
}

void String::Delete(int pos,int length) ////删除
//从pos位置开始删除长度为length的子字符串
{
int charsLeft=size-pos; //剩余的最大长度
if(pos>size-1) return;
if(length>charsLeft) length=charsLeft;
//从pos至size逐位左移以删除长度为length的子字符串
for(int i=pos;i<=size;i++)
str[i]=str[i+length];  
size=size-length; ///置串的当前长度
}

String String::SubStr(int pos,int length) /////取子串
{
int charsLeft=size-pos; //剩余的最大长度
String temp;  
if(pos>size-1)return temp; //返回空串
if(length>charsLeft) length=charsLeft; 
delete []temp.str;
temp.str=new char[length+1]; ///重新申请内存空间

for(int i=0;i<length;i++) temp[i]=str[pos+1];

temp[length]=NULL; ///置结束标记符
temp.size=length;
temp.maxSize=length+1;
return temp;  
}

char& String::operator[](int i) ////数组元素操作符[]重载
{
return str[i];
}

String& String::operator =(const String& s) //////赋值操作符=重载1
{
if(maxSize<s.maxSize)
{
delete []str;
str=new char[s.maxSize];
}
size=s.size;
maxSize=s.maxSize;
for(int i=0;i<=size;i++)
str[i]=s.str[i];

return *this;
}

String& String::operator =(char *s) //////赋值操作符=重载2


{
int length=strlen(s);
if(maxSize<length+1)
{
delete []str;
str=new char[length+1];
maxSize=length+1;
}

size=length;
strcpy(str,s);
return *this;
}

ostream& operator << (ostream& ostr,const String& s) ///输出流操作符<<重载
{
cout<<"s.size="<<s.size<<endl;
cout<<"s.maxSize="<<s.maxSize<<endl;
cout<<"s.str="<<s.str<<endl;
return ostr;
}

istream& operator >> (istream& istr,String& s) ///输入流操作符>>重载
{
delete []s.str;
cout<<"输入字符串个数";
cin>>s.size;
s.maxSize=s.size+1;
s.str=new char[s.maxSize];
cout<<"输入字符串";
for(int i>0;i<s.size;i++)
cin>>s.str[i];
s.str[s.size]=NULL;
return istr;

}

int String::operator == (const String& s)const ///逻辑等于操作符重载1
{
return(strcmp(str,s.str)==0); /////若逻辑等于则返回1;否则返回0
}

int String::operator ==(char *s)const ///逻辑等于操作符重载2
{
return(strcmp(str,s)==0);
}

int operator ==(char *strL,const String& StrR) ///逻辑等于操作符重载3
{
return (strcmp(strL,StrR.str)==0);
}


测试主函数main.cpp
#include"String.h"
#include<iostream.h>
#include<stdlib.h>
#include<string.h>


void main(void)
{
String str1("Yao Jungyu"),str2("2006151014");
String str3;
String str4(20);
String str5(str1);
char st[]="Pan Hongyu";

cout<<"拷贝构造函数测试:"<<endl<<str5;

str2.Insert(11,st);
cout<<"插入测试:"<<endl<<str2;

str2.Delete(0,11);
cout<<"删除测试:"<<endl<<str2;

str3=str1.SubStr(4,11);
cout<<"取子串和对象赋值测试:"<<endl<<str3;

str4=st;
cout<<"字符串赋值测试:"<<endl<<str4;

cout<<"输入流重载测试:"<<endl;
cin>>str3;
cout<<str3;

cout<<"逻辑等于测试1:";
if(str1==str5)cout<<"str1==str5"<<endl;

String str6("Pang Hongyu");
cout<<"逻辑等于测试2:";
if(str6=="Yao Jungyu")cout<<"String == C++ string"<<endl;

cout<<"逻辑等于测试3:";
if("Pang Hongyu"==str6)cout<<"C++ string==String"<<endl;

}

报错信息:
--------------------Configuration: 实验三 - Win32 Debug--------------------
Compiling...
main.cpp
f:\实验三\string.h(174) : error C2143: syntax error : missing ';' before '>'
f:\实验三\string.h(174) : error C2143: syntax error : missing ';' before '>'
f:\实验三\string.h(174) : error C2143: syntax error : missing ')' before '>'
f:\实验三\string.h(174) : error C2143: syntax error : missing ';' before '>'
f:\实验三\string.h(174) : warning C4552: '<' : operator has no effect; expected operator with side-effect
f:\实验三\string.h(174) : error C2059: syntax error : ')'
f:\实验三\string.h(175) : error C2146: syntax error : missing ';' before identifier 'cin'
执行 cl.exe 时出错.

实验三.exe - 1 error(s), 0 warning(s)



我想晕了...............................

[解决办法]
istream& operator > > (istream& istr,String& s) ///输入流操作符 > >重载 

delete []s.str; 
cout < <"输入字符串个数"; 
cin > >s.size; 
s.maxSize=s.size+1; 
s.str=new char[s.maxSize]; 
cout < <"输入字符串"; 
for(int i >0;i <s.size;i++) 
cin > >s.str[i]; 


s.str[s.size]=NULL; 
return istr; 



for(int i >0;i <s.size;i++) 这有问题是不是int i=0;呢????
我运行你的程序只发现这出错了.其他地方没错啊!!
^_^

[解决办法]
把搂上的问题改过来就可以了
[解决办法]
单步调适.
如果用的是vc6.0你可以按F9进行设置断点.让后按F10进行一步一步调试.
详细可以看看vc++教程,有调试错误的书