一个关于类模板与运算符重载的问题

#include<iostream>usingnamespacestd;template<typenamet>classxushu{private:ta;tb;publi... #include<iostream>
using namespace std;
template<typename t>
class xushu{

private:
t a;
t b;
public:
xushu(t a,t b):a(a),b(b){}
xushu operator+( xushu c);
xushu operator-( xushu d);
xushu operator*( xushu e);
xushu operator/( xushu f);
friend ostream &operator<<(ostream &out, xushu g);
~xushu();
};
template<typename t>
xushu<t> xushu<t>::operator +(xushu<t> c)
{
return xushu(a+c.a,b+t.b);
}
template<typename t>
xushu<t> xushu<t>::operator -(xushu<t> d)
{
return xushu(a-d.a,b-d.b);
}
template<typename t>
xushu<t> xushu<t>::operator *(xushu<t> e)
{
return((a*e.a-b*e.b)(b*e.a+a*e.b));
}
template<typename t>
xushu<t> xushu<t>::operator /(xushu<t> f)
{
return((a*f.a+b*f.b)/(f.a*f.a+f.b*f.b),(b*f.a-a*f.b)/(f.a*f.a+f.b*f.b))
}

ostream & operator<<(ostream &out,xushu<t> g) //“t”: 未声明的标识符指的是这
{
out<<"("<<g.a<<"+"<<g.b<<"i)"<<endl;
//以(a+bi)的格式输出复shu
return out;
}
int main()
{
xushu<int> a(1,1) ,b(1,2);
xushu<int> c=a+b;
cout<<c<<endl;
xushu<int> c1=a-b;
cout<<c1<<endl;
xushu<int> c2=a*b;
cout<<c2<<endl;
xushu<int> c3=a/b;
cout<<c3<<endl;
return 0;

}
我运行不了 ,编译错误
error C2065: “t”: 未声明的标识符
sdf.cpp(41) : warning C4552: “<<”: 运算符不起任何作用;应输入带副作用的运算符
求解谢谢。请详细说明
展开
 我来答
353951452
2011-09-14 · 超过34用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:100万
展开全部
#include<iostream>
using namespace std;
template<typename t>
class xushu{

private:
t a;
t b;
public:
xushu(t a,t b):a(a),b(b){}
xushu operator+( xushu c);
xushu operator-( xushu d);
xushu operator*( xushu e);
xushu operator/( xushu f);
// friend istream& operator>>( istream & in, sqlist<T> & s)
friend ostream &operator<<(ostream &out, xushu<t> &g)
{
out<<"("<<g.a<<"+"<<g.b<<"i)"<<endl;
//以(a+bi)的格式输出复shu
return out;
}
~xushu(){}
};
template<typename t>
xushu<t> xushu<t>::operator +(xushu<t> c)
{
return xushu(a+c.a,b+c.b);//这有错 你的(a+c.a,b+t.b) 改成c.b
}
template<typename t>
xushu<t> xushu<t>::operator -(xushu<t> d)
{
return xushu(a-d.a,b-d.b);
}
template<typename t>
xushu<t> xushu<t>::operator *(xushu<t> e)
{
return xushu((a*e.a-b*e.b),(b*e.a+a*e.b));//这有错 你的return((a*e.a-b*e.b)(b*e.a+a*e.b)) 改成return xushu((a*e.a-b*e.b),(b*e.a+a*e.b))
}
template<typename t>
xushu<t> xushu<t>::operator /(xushu<t> f)
{
return xushu((a*f.a+b*f.b)/(f.a*f.a+f.b*f.b),(b*f.a-a*f.b)/(f.a*f.a+f.b*f.b));//这有错 改成我写的
}

//ostream & operator<<(ostream &out,xushu<t> g) //“t”: 未声明的标识符指的是这
//{
// out<<"("<<g.a<<"+"<<g.b<<"i)"<<endl;
// //以(a+bi)的格式输出复shu
// return out;
//}
int main()
{
xushu<int> a(1,1) ,b(1,2);
xushu<int> c=a+b;
cout<<c<<endl;
xushu<int> c1=a-b;
cout<<c1<<endl;
xushu<int> c2=a*b;
cout<<c2<<endl;
xushu<int> c3=a/b;
cout<<c3<<endl;
return 0;

}
试一下我改的代码 看是你要的结果么
追问
不行啊
你把d:\原代码\vc\类模板与运算符重载\类模板与运算符重载\sdf.cpp(16) : error C2059: 语法错误 : “{”
1> : 参见对正在编译的类 模板 实例化“xushu”的引用
1>: error C2334: “{”的前面有意外标记;跳过明显的函数体
1>: error C2059: 语法错误 : “{”

1>: error C2334: “{”的前面有意外标记;跳过明显的函数体
追答
你就直接拷贝我的过去   我这我xcode上运行时没有问题的  你用的什么编译器  我在帮你看一下啊
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式