
一个关于类模板与运算符重载的问题
#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: “<<”: 运算符不起任何作用;应输入带副作用的运算符
求解谢谢。请详细说明 展开
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: “<<”: 运算符不起任何作用;应输入带副作用的运算符
求解谢谢。请详细说明 展开
1个回答
展开全部
#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;
}
试一下我改的代码 看是你要的结果么
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上运行时没有问题的 你用的什么编译器 我在帮你看一下啊
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |