关于C++中的类模板问题
本人初涉C++现在学习到了类模板那个地方做了个小程序代码如下#include<iostream>usingnamespacestd;#definem10000000tem...
本人初涉C++ 现在学习到了类模板那个地方 做了个小程序 代码如下
#include <iostream>
using namespace std;
#define m 10000000
template<class T> //定义类模板
class Student
{
int n;
public:
int b1[m];
float b2[m];
float b3[m];
set();
display();
private:
T num[m],math[m],eng[m];
};
template<class T>
? Student<T>::set()
{
cout<<"Please input the student's number and the math grade and the english grade:"<<endl;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>num[i]>>math[i]>>eng[i];
b1[i]=num[i];
b2[i]=math[i];
b3[i]=eng[i];
}
}
template<class T>
? Student<T>::display()
{
cout<<"number\t"<<"math\t"<<"english\t";
for(int j=0;j<=n;j++)
cout<<b1[j]<<"\t"<<b2[j]<<"\t"<<b3[j]<<"\t"<<endl;
}
void main( )
{
Student<?> std1;
std1.set();
std1.display();
}
但是在编译的时候出问题了 就是函数类型和调用的时候好像不一样 但是第一个set()函数中 又有int float 不知道到底该在问号的地方写什么类型 求麻烦大家帮忙看下 谢谢了 展开
#include <iostream>
using namespace std;
#define m 10000000
template<class T> //定义类模板
class Student
{
int n;
public:
int b1[m];
float b2[m];
float b3[m];
set();
display();
private:
T num[m],math[m],eng[m];
};
template<class T>
? Student<T>::set()
{
cout<<"Please input the student's number and the math grade and the english grade:"<<endl;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>num[i]>>math[i]>>eng[i];
b1[i]=num[i];
b2[i]=math[i];
b3[i]=eng[i];
}
}
template<class T>
? Student<T>::display()
{
cout<<"number\t"<<"math\t"<<"english\t";
for(int j=0;j<=n;j++)
cout<<b1[j]<<"\t"<<b2[j]<<"\t"<<b3[j]<<"\t"<<endl;
}
void main( )
{
Student<?> std1;
std1.set();
std1.display();
}
但是在编译的时候出问题了 就是函数类型和调用的时候好像不一样 但是第一个set()函数中 又有int float 不知道到底该在问号的地方写什么类型 求麻烦大家帮忙看下 谢谢了 展开
2个回答
展开全部
#include <iostream>
using namespace std;
#define m 10000000
template<class N,class M, class E> //定义类模板
class Student
{
int n;
public:
int b1[m];
float b2[m];
float b3[m];
void set();
void display();
private:
N num[m];
M math[m];
E eng[m];
};
template<class N,class M, class E>
void Student<N,M,E>::set()
{
cout<<"Please input the student's number and the math grade and the english grade:"<<endl;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>num[i]>>math[i]>>eng[i];
b1[i]=num[i];
b2[i]=math[i];
b3[i]=eng[i];
}
}
template<class N,class M, class E>
void Student<N,M,E>::display()
{
cout<<"number\t"<<"math\t"<<"english\t";
for(int j=0;j<=n;j++)
cout<<b1[j]<<"\t"<<b2[j]<<"\t"<<b3[j]<<"\t"<<endl;
}
void main( )
{
Student<int,float,int> std1;
std1.set();
std1.display();
}
//如果不一样,可以这么写
using namespace std;
#define m 10000000
template<class N,class M, class E> //定义类模板
class Student
{
int n;
public:
int b1[m];
float b2[m];
float b3[m];
void set();
void display();
private:
N num[m];
M math[m];
E eng[m];
};
template<class N,class M, class E>
void Student<N,M,E>::set()
{
cout<<"Please input the student's number and the math grade and the english grade:"<<endl;
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>num[i]>>math[i]>>eng[i];
b1[i]=num[i];
b2[i]=math[i];
b3[i]=eng[i];
}
}
template<class N,class M, class E>
void Student<N,M,E>::display()
{
cout<<"number\t"<<"math\t"<<"english\t";
for(int j=0;j<=n;j++)
cout<<b1[j]<<"\t"<<b2[j]<<"\t"<<b3[j]<<"\t"<<endl;
}
void main( )
{
Student<int,float,int> std1;
std1.set();
std1.display();
}
//如果不一样,可以这么写
展开全部
函数既然不需要返回值,那就不用写函数类型了,直接void就可以
追问
我试过三个函数 即set display 还有主函数中的定义对象的时候都写的void 但是现在给我的结果是:类体内的两个函数 must have class/struct/union type 这个问题没办法解决
我主要的想法是这样的 因为题目规定的不许明确num math eng这三个数组的类型 所以我定义了有类型的数组 int b1[m] floatb2[m] float b3[m]来进行传值 是不是这个地方有问题呢 还有如果想运行这个程序的话 该怎么改呢?
追答
定义变量的时候 里面一定写明类型,还有既然你三个数组为同一类型,为何你定义三个有类型变量类型不同,还有你可以对set加参数啊,这样才能赋值,否则你怎么赋值,你那个must have class type指的是哪一行代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询