小弟编写的程序里面要用到<<运算符的重载,可是不知出现了什么问题,指示的错误是:
--------------------Configuration: realhome - Win32 Debug--------------------
Compiling...
realhome.cpp
D:\studio\2004\realhome.cpp(35) : error C2248: 'data' : cannot access private member declared in class 'MyString'
        D:\studio\2004\realhome.cpp(16) : see declaration of 'data'
D:\studio\2004\realhome.cpp(44) : error C2593: 'operator <<' is ambiguous
Error executing cl.exe.realhome.exe - 2 error(s), 0 warning(s)我的代码是:
class MyString 
{
friend ostream &operator<<(ostream &out,MyString str);public:
MyString(){length = 0;data=NULL;}
MyString(char* DataIn);
~MyString();
private:
int length;
char *data;
};
ostream &operator<<(ostream &out,MyString str)
{
out<<str.data;
return out;
}int main()
{
MyString MStr0;
MyString MStr1("Hello World!!");
cout<<"main"<<endl;
cout<<MStr1<<endl;
return 0;
}
其中已经排除构造函数中出现问题的可能性,所以没有写出来,请各位大哥帮帮忙吧,小弟感谢不尽啦...
这是什么错啊?为什么会这样呢?

解决方案 »

  1.   

    #include<iostream>
    using namespace std;class MyString 
    {
    friend ostream &operator<<(ostream &out,MyString str);
    public:
    MyString(){length = 0;data=NULL;}
    MyString(char* DataIn);
    ~MyString();
    private:
    int length;
    char *data;
    };MyString::MyString(char* DataIn)
    {
    length = 0;int i=0;
    for(i=0;DataIn[i]!= '\0';i++);
    length =i;
    data = new char[length+1];
    for(i=0;i<=length;i++){data[i]=DataIn[i];}
    }
    MyString::~MyString () 
    {
    delete []data;
    length = 0;
    }ostream &operator<<(ostream &out,MyString str)
    {
    out<<str.data;
    return out;
    }int main()
    {
    MyString MStr0;
    MyString MStr1("Hello World!!");
    cout<<"main"<<endl;
    cout<<MStr1<<endl;
    return 0;
    }
    //全了
      

  2.   

    //public: char *data;
    这样做也是不能解决这一问题的...我使用的编译环境是VStudio6中的VC++6
      

  3.   

    这是不能的,cout这个已经是ostream类对象,它内部已经重载<<和>>,所以你另开炉灶就当然提示
    operator <<' is ambiguous.
      

  4.   

    #include<iostream>using namespace std;class MyString 
    {
    friend ostream &operator<<(ostream &out,MyString str)
    {
    out<<str.data;
    return out;
    }
    public:
    MyString(){length = 0;data=NULL;}
    MyString(char* DataIn);
    ~MyString();
    private:
    int length;
    char *data;
    };MyString::MyString(char* DataIn)
    {
    length = 0;int i=0;
    for(i=0;DataIn[i]!= '\0';i++);
    length =i;
    data = new char[length+1];
    for(i=0;i<=length;i++){data[i]=DataIn[i];}
    }
    MyString::~MyString () 
    {
    length = 0;
    delete []data;
    }int main()
    {
    MyString MStr0;
    MyString MStr1("Hello World!!");
    cout<<"main"<<endl;
    cout<<MStr1<<endl;
    return 0;
    }
      

  5.   

    for(i=0;i<=length;i++){data[i]=DataIn[i];}
    ~~~~~~~~~~~~~~~~~~~~~~~~这里最后流一个字符填\0