关于运算符重载中的string类型问题
											请看看以下代码:
程序代码:#include<iostream.h>
#include<string.h>
class String
{
    public:
        String(string);
        
        ~String();
        void Show();
        friend bool operator == (const String &s1,const String &s2);
        friend String operator >(const String &s1,const String &s2);
    private:
        string  str;
};
String::String(int s)
{
    str=s;
}
String::~String()
{}
void String::Show()
{
    cout<<str<<endl;
}
bool operator == (const String &s1,const String &s2)
{
    return (s1.str==s2.str);
}
String operator >(const String &s1,const String &s2)
{
    if(s1.str>s2.str)
        return s1;
    else
        return s2;
}
int main()
{
    string a,b;
    cin>>a;
    cin>>b;
    String s1(a),s2(b),s3;
    if(s1==s2)
        cout<<"相等"<<endl;
    else
        cout<<"不"<<endl;
    s3=(s1>s2);
    s3.Show();
    return 0;
}
    这段代码是错误的。
会产生如下错误:
2011051901.cpp(36) : error C2248: 'str' : cannot access private member declared in class 'String'
当然,错误不只这一个,其他的错误跟这个一样。
问了老师,她说私有数据里面不能有string类型。
然后我改了下代码把string类型换成int的话就正确。
就是想问:
1、运算符重载里面string类型为什么不能使用?
2、不使用运算符重载,一般的类里面是不是就可以用到string类型?
3、接上一问,如果string类型不能用,那么我想表示一个不限长度的字符串,是不是只能用char *str;?
4、假如私有数据类型里面的那个是int类型,头文件定义要定义成#include<iostream.h>
是不是所有关于运算符重载的头文件定义都必须是:#include<iostream.h>
而不能是#include<iostream>
using namespace std;



											

	    

	


