小弟编写的程序里面要用到<<运算符的重载,可是不知出现了什么问题,指示的错误是:
--------------------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;
}
其中已经排除构造函数中出现问题的可能性,所以没有写出来,请各位大哥帮帮忙吧,小弟感谢不尽啦...
这是什么错啊?为什么会这样呢?
--------------------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;
}
其中已经排除构造函数中出现问题的可能性,所以没有写出来,请各位大哥帮帮忙吧,小弟感谢不尽啦...
这是什么错啊?为什么会这样呢?
解决方案 »
- 交互绘图时有颜色的橡皮条怎么实现?
- 如下的设置为何广播数据接受不到呢,采用CSOCKET
- 寻找c/c++访问sql server的连接池。
- mci当中如何能得到所有MCI设备数量?以及如何指定设备播放?超多分数求解
- 请问:代表专家分的图标分别是多少分呀?(我有两年没来这了)
- 新手的小问题”
- 关于Vc对文本文件的操作(急!)
- 请高手指导!HOOK了IE的send,无法访问网页
- 请问vc++6.0下调用API函数DeviceIoControl时,哪个头文件定义了STORAGE_DEVICE_DESCRIPTOR结构体
- 如何用ADO将文件存入Oracle8i的BLOB字段中???
- 请教SDI中的打印问题
- 重叠I/O 模型 + 事件通知 的疑问,请教!?
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;
}
//全了
这样做也是不能解决这一问题的...我使用的编译环境是VStudio6中的VC++6
operator <<' is ambiguous.
{
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;
}
~~~~~~~~~~~~~~~~~~~~~~~~这里最后流一个字符填\0