有关C++ cout 输出问题 为什么下面的代码会报错,如果用注释的写法就是对的
#include<iostream>usingnamespacestd;classtest{private:inta;public:test(intc=0){a=c;}t...
#include <iostream>
using namespace std;
class test
{
private:
int a;
public:
test(int c=0){a=c;}
test operator+(test &t){return test(a+t.a);}
friend ostream &operator<<(ostream &os,test &t);
};
ostream &operator<<(ostream &os,test &t)
{
os << "a=" << t.a;
return os;
}
int main()
{
test t1,t2;
t1=test(1);
t2=test(2);
//t1=t1+t2;
cout << t1+t2; //cout << t1;
return 0;
}
编译器显示一大堆类似cannot convert 't1.test::operator+((* & t2))' (type 'test') to type 'const unsigned char*'这样的东西,也就是说编译器把cout << t1+t2;中的t1+t2当做函数类型,并没有先算t1+t2,然后返回test类型。有什么解决办法吗?
(我用的是MingW编译器,在eclipse上写的c++) 展开
using namespace std;
class test
{
private:
int a;
public:
test(int c=0){a=c;}
test operator+(test &t){return test(a+t.a);}
friend ostream &operator<<(ostream &os,test &t);
};
ostream &operator<<(ostream &os,test &t)
{
os << "a=" << t.a;
return os;
}
int main()
{
test t1,t2;
t1=test(1);
t2=test(2);
//t1=t1+t2;
cout << t1+t2; //cout << t1;
return 0;
}
编译器显示一大堆类似cannot convert 't1.test::operator+((* & t2))' (type 'test') to type 'const unsigned char*'这样的东西,也就是说编译器把cout << t1+t2;中的t1+t2当做函数类型,并没有先算t1+t2,然后返回test类型。有什么解决办法吗?
(我用的是MingW编译器,在eclipse上写的c++) 展开
3个回答
展开全部
<<运算优先级比+运算高,所以会先cout << t1,然后再+t2,cout与test是的+法运算是未定义的,所以出错了。
cout << (t1+t2); 可以加括号的处理
-------------------------------------------------------------------------------------
刚查了下优先级比,发现是+号优先于<<的,你这可能是编译器的问题。
因为+返回一个临时对象,可能跟临时对象的处理有关
除了用()外,你可以试试下面的代码
friend ostream &operator<<(ostream &os,test &t);
改成
friend ostream &operator<<(ostream &os,const test &t);
-------------------------------------------------------------------------------------
刚用代码测了下,的确是需要加上const的才可以。不加const的话,不管加不加括号都会出错。
看来的确是临时对象的关系,临时对象是实际是const的,所以找最匹配的<<运算时,friend ostream &operator<<(ostream &os,test &t); 不通过的。
最后找到const unsigned char*了,但const test是转不成const unsigned char*的,所以报了上面的错误
cout << (t1+t2); 可以加括号的处理
-------------------------------------------------------------------------------------
刚查了下优先级比,发现是+号优先于<<的,你这可能是编译器的问题。
因为+返回一个临时对象,可能跟临时对象的处理有关
除了用()外,你可以试试下面的代码
friend ostream &operator<<(ostream &os,test &t);
改成
friend ostream &operator<<(ostream &os,const test &t);
-------------------------------------------------------------------------------------
刚用代码测了下,的确是需要加上const的才可以。不加const的话,不管加不加括号都会出错。
看来的确是临时对象的关系,临时对象是实际是const的,所以找最匹配的<<运算时,friend ostream &operator<<(ostream &os,test &t); 不通过的。
最后找到const unsigned char*了,但const test是转不成const unsigned char*的,所以报了上面的错误
更多追问追答
追问
我加()还是不行。
加const不对吧,因为不是成员函数,编译器报错了。
追答
把最后的const的去掉,只要参数里面的const。
这个经验告诉我们,c++写函数参数的时候,能加const的最好都加上
另外vc6.0对类型的检测并不是很严格,vs后面的版本都挺严格的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-08-23
展开全部
对象不可以这样+操作 。。。。。。。。。。。。。。。
要两个输出,就两次
cout<<t1<<t2;
要两个输出,就两次
cout<<t1<<t2;
追问
我已经重载+运算符了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询