这个关于C++类模板的问题
#include<iostream>usingnamespacestd;template<classT>classM{private:staticintTa[30];in...
#include<iostream>
using namespace std;
template<class T>
class M
{
private :
static int Ta[30];
int n;
char k[20];
public:
M()
{n=0;k[20]="there isn't this number"}
T search(T N)
{
T*p1=Ta;
if(p1==N)return n+1;
if(p1!=N) {p1++;n++}
if(p1==0) return k;
}
};template <class T>
int M<T>::Ta[30]={1,2,66,8,5,6,21,334};
void main()
{ int m;
cout<<"请输入一个你要在数据库中查找的正整数"<<endl;
cin>>m;
M<int>INTA();
cout<<INTA.search(m)<<endl;
system("pause");
}
倒数第二行系统报错了,在.search右边没有类或者联合类之类的东西 明明我定义了啊 为什么会这样 展开
using namespace std;
template<class T>
class M
{
private :
static int Ta[30];
int n;
char k[20];
public:
M()
{n=0;k[20]="there isn't this number"}
T search(T N)
{
T*p1=Ta;
if(p1==N)return n+1;
if(p1!=N) {p1++;n++}
if(p1==0) return k;
}
};template <class T>
int M<T>::Ta[30]={1,2,66,8,5,6,21,334};
void main()
{ int m;
cout<<"请输入一个你要在数据库中查找的正整数"<<endl;
cin>>m;
M<int>INTA();
cout<<INTA.search(m)<<endl;
system("pause");
}
倒数第二行系统报错了,在.search右边没有类或者联合类之类的东西 明明我定义了啊 为什么会这样 展开
展开全部
先解释你的疑问:
//M<int>INTA();//这里这么写是初学者很容易犯的错误,C++创建对象的时候不加左右括号就是调用无参数的构造函数了。你加了左右括号就变成了一个返回类的无参数的函数了。
M<int> INTA;//这样就没有你说的问题了。
还有其他的问题的:
//{n=0;k[20]="there isn't this number"}//这里字符串后面少了分号,C语言里面的字符数组不支持复制和赋值,只能自己编写循环。C++里面使用string来实现这一目的。
最后说一下你这个程序:
程序很烂:结构不清晰,算法也没有达到目的。用C的那一套来往C++上面搬。
如果用C++写这个模板类,代码简洁明了,看起来很舒服。由于实在不知道你这个代码的具体意图(我猜可能是在静态数据里面查找一个整数,那为什么要设计成模板。难道你的模板具现化为float之后能够在int数组里查找?)。
//M<int>INTA();//这里这么写是初学者很容易犯的错误,C++创建对象的时候不加左右括号就是调用无参数的构造函数了。你加了左右括号就变成了一个返回类的无参数的函数了。
M<int> INTA;//这样就没有你说的问题了。
还有其他的问题的:
//{n=0;k[20]="there isn't this number"}//这里字符串后面少了分号,C语言里面的字符数组不支持复制和赋值,只能自己编写循环。C++里面使用string来实现这一目的。
最后说一下你这个程序:
程序很烂:结构不清晰,算法也没有达到目的。用C的那一套来往C++上面搬。
如果用C++写这个模板类,代码简洁明了,看起来很舒服。由于实在不知道你这个代码的具体意图(我猜可能是在静态数据里面查找一个整数,那为什么要设计成模板。难道你的模板具现化为float之后能够在int数组里查找?)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询