error C2593: 'operator <<' is ambiguous
时间:2011-12-22
来源:互联网
using namespace std;
class Test
{
public:
Test(int age = 0,char *name = "\0")
{
Test::age = age;
strcpy(Test::name,name);
}
void outmembers(ostream &out)
{
out<<"Age:"<<age<<endl<<"Name:"<<this->name<<endl;
}
friend ostream& operator <<(ostream& ,Test&);
protected:
int age;
char name[50];
};
ostream& operator <<(ostream& out,Test &temp)
{
temp.outmembers(out);
return out;
}
int main()
{
Test a(24,"管宁");
cout<<a;
system("pause");
return 0;
}
会出现
error C2593: 'operator <<' is ambiguous
Error executing cl.exe.
date22_1.obj - 1 error(s), 0 warning(s)
错误,是编译器的问题吗?
作者: okmime 发布时间: 2011-12-22
干嘛还弄个outmembers
把outmembers的代码copy到operator <<,删掉outmembers()
你叫outmembers()掉用你重载的<<的还是调用原来的呢?编译器怎么判断
如果outmembers()调用operator <<
operator <<又调用 outmembers 这也可以死循环哈
作者: erqieshi 发布时间: 2011-12-22
作者: woshiwaiwai 发布时间: 2011-12-22
既然你重载了 << ,
干嘛还弄个outmembers
把outmembers的代码copy到operator <<,删掉outmembers()
你叫outmembers()掉用你重载的<<的还是调用原来的呢?编译器怎么判断
如果outmembers()调用operator <<
operator <<又调用 outmembers 这也可以死循环哈
这个不会陷入死循环,调用哪个<<要看<<后的参数,在它的outmembers里,没有使用Test作为<<的第二个参数,所有不会
作者: woshiwaiwai 发布时间: 2011-12-22
#include <iostream> using std::ostream; using std::cout; using std::endl; class Test { public: Test(int age = 0,char *name = "\0") { Test::age = age; strcpy(Test::name,name); } void outmembers(ostream &out) { out<<"Age:"<<age<<endl<<"Name:"<<this->name<<endl; } friend ostream& operator <<(ostream& ,Test&); protected: int age; char name[50]; }; ostream& operator <<(ostream& out,Test &temp) { temp.outmembers(out); return out; } int main() { Test a(24,"管宁"); cout<<a; system("pause"); return 0; }
这样就可以了,你用using namespace std里面已经包含了对<<定义,你继续重载<<,就会出现使用模糊的错误了
作者: shenxinji 发布时间: 2011-12-22
C/C++ code
#include <iostream>
using std::ostream;
using std::cout;
using std::endl;
class Test
{
public:
Test(int age = 0,char *name = "\0")
{
Test::age = age;
strcpy(……
up
作者: elegant87 发布时间: 2011-12-22
C/C++ code
#include <iostream>
using std::ostream;
using std::cout;
using std::endl;
class Test
{
public:
Test(int age = 0,char *name = "\0")
{
Test::age = age;
strcpy(……
是滴~~
作者: yafeng_jiang 发布时间: 2011-12-22
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28