看看这个错误'complex' : use of class template requires template argument list

jzp12 2007-05-04 05:52:44
原程序如下:
#include <iostream>
#include <complex>
using namespace std;

class Mycomplex : public complex
{
public:
Mycomplex():complex(0,0){}
Mycomplex()(double r,double i):complex(r,i){}
friend int operator > (Mycomplex& c1,Mycomplex& c2);
};

int operator >(Mycomplex&c1,Mycomplex& c2)
{
return abs(c1)>abs(c2);
}

template <class T>
T& Bigger (T& a,T& b)
{
return (a>b) ? a : b;
}

int main()
{
int i1 = 10, i2 = 20, i3;
double d1 = 1.1,d2 = 2.2 , d3;
Mycomplex c1(1,2),c2(3,4),c3;
i3 = Bigger(i1,i2);
d3 = Bigger(d1,d2);
c3 = Bigger(c1,c2);
return 0;
}

编译错误如下:
E:\C++Language\WorkArea\Test070504\testmain.cpp(7) : error C2955: 'complex' : use of class template requires template argument list
c:\program files\microsoft visual studio\vc98\include\complex(267) : see declaration of 'complex'
E:\C++Language\WorkArea\Test070504\testmain.cpp(7) : fatal error C1903: unable to recover from previous error(s); stopping compilation
...全文
5632 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tenjingou 2011-11-04
  • 打赏
  • 举报
回复
举个例子,希望对你有帮助!
template <class Elem>
class dddd{};

dddd a; // 错误!!

正确的做法是:

dddd <int> a;

dddd是类模板名,而不是一个具体的类,类模板中的类型 Elem并不是一个实际类型,只是一个虚拟的类型,无法用它去定义类的对象。必须用实际类型名去取代虚拟的类型。

禾火山 2010-12-02
  • 打赏
  • 举报
回复
怎么解决的呢?
sunnyes2008 2010-08-10
  • 打赏
  • 举报
回复
定义对象时要把类型写上。
sunnyes2008 2010-08-10
  • 打赏
  • 举报
回复
加我QQ:495711824我告诉你
jxqiong 2008-12-19
  • 打赏
  • 举报
回复
解释的挺好的,可是我的问题类型不大一样哦。
hityct1 2008-03-26
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include <iostream>
#include <complex>
using namespace std;

class Mycomplex:public complex<double>
{
public:
Mycomplex():complex<double>(0.0,0.0)
{}

Mycomplex(double r,double i):complex<double>(r,i)
{}

friend bool operator >(Mycomplex& c1,Mycomplex& c2)
{
return abs(c1)> abs(c2);
}
};


template<class T>
T Bigger (T& a,T& b)
{
return (a> b)?a:b;
}

int main()
{
int i1 = 10, i2 = 20, i3;
double d1 = 1.1,d2 = 2.2, d3;
Mycomplex c1(1,2),c2(3,4),c3;
i3 = Bigger(i1,i2);
cout<<i3<<endl;
d3 = Bigger(d1,d2);
cout<<d3<<endl;
c3 = Bigger(c1,c2);
cout<<c3<<endl;

return 0;
}

xiaofang3100 2008-03-26
  • 打赏
  • 举报
回复
你的实现函数是不是要加个类作用域:: 你的函数是在类外实现的呀
linquanjushi 2008-03-25
  • 打赏
  • 举报
回复
谢谢高手能给一个完整的例子,我在用模板时也出现了问题,我自己设计了一个模板,但也出现了一楼那样的错误.
believefym 2007-05-04
  • 打赏
  • 举报
回复
use of class template requires template argument list
编译信息说得挺明白的,模板类的使用需要模板参数list
lightnut 2007-05-04
  • 打赏
  • 举报
回复

1
std::complex是个模板类!!

class Mycomplex : public complex
====>
class Mycomplex : public complex<double>

2.

Mycomplex()(double r,double i):complex(r,i){}
====>
Mycomplex(double r,double i):complex(r,i){}

3.
friend int operator > (Mycomplex& c1,Mycomplex& c2);
===>
friend bool operator > (Mycomplex& c1,Mycomplex& c2);



65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧