关于运算符重载中的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;