C++中类对象数组的初始化
以下是我是部分程序先是对一个类的定义,请检查一下,我的结构函数正确吗?classStudent{private:intNum,Chinese,Maths,English;...
以下是我是部分程序
先是对一个类的定义,请检查一下,我的结构函数正确吗?
class Student
{
private:
int Num,Chinese,Maths,English;
float Total;
char Name[20];
public:
Student(char name[20],int num,int chinese,int maths,int english )
{
int n;
for(n=0;n<strlen(name);n++)Name[n]=name[n];
Num=num;
Chinese=chinese;
English=english;
Maths=maths;
Total=maths+chinese+english;
}
};
下面是我MAIN函数里的初始化程序
Student std[5];
for(i=0;i<5;i++)
{
cin>>name[20]>>num>>chinese>>maths>>english;
std[i](name[20],num,chinese,maths,english);
for(j=0;j<20;j++)
name[j]='\0';
}
编译错误提示如下:
--------------------Configuration: aaaa - Win32 Debug--------------------
Compiling...
aaaa.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\aaaa\aaaa.cpp(30) : error C2512: 'Student' : no appropriate default constructor available
C:\Program Files\Microsoft Visual Studio\MyProjects\aaaa\aaaa.cpp(41) : error C2064: term does not evaluate to a function
Error executing cl.exe.
aaaa.exe - 2 error(s), 0 warning(s)
请求帮助啊!!~~~~~~着急!~ 展开
先是对一个类的定义,请检查一下,我的结构函数正确吗?
class Student
{
private:
int Num,Chinese,Maths,English;
float Total;
char Name[20];
public:
Student(char name[20],int num,int chinese,int maths,int english )
{
int n;
for(n=0;n<strlen(name);n++)Name[n]=name[n];
Num=num;
Chinese=chinese;
English=english;
Maths=maths;
Total=maths+chinese+english;
}
};
下面是我MAIN函数里的初始化程序
Student std[5];
for(i=0;i<5;i++)
{
cin>>name[20]>>num>>chinese>>maths>>english;
std[i](name[20],num,chinese,maths,english);
for(j=0;j<20;j++)
name[j]='\0';
}
编译错误提示如下:
--------------------Configuration: aaaa - Win32 Debug--------------------
Compiling...
aaaa.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\aaaa\aaaa.cpp(30) : error C2512: 'Student' : no appropriate default constructor available
C:\Program Files\Microsoft Visual Studio\MyProjects\aaaa\aaaa.cpp(41) : error C2064: term does not evaluate to a function
Error executing cl.exe.
aaaa.exe - 2 error(s), 0 warning(s)
请求帮助啊!!~~~~~~着急!~ 展开
1个回答
展开全部
1、当你定义了构造函数以后,默认的构造函数就不起作用了。所以你得类里边就没有默认的构造函数,即:没有没有参数的构造函数。所以Student std[5]; 是错误的。
2、所有构造函数都是在定义时候就调用,定义以后的调用就不叫初始化了,而是赋值。
所以std[i](name[20],num,chinese,maths,english); 就是错误的。
3、解决方法:
你只能定义一系列指针,然后再每次构造的时候调用new来构造类对象。
如:
Student *std[5];
for(i=0;i<5;i++)
{
cin>>name[20]>>num>>chinese>>maths>>english;
std[i]=new Student(name[20],num,chinese,maths,english);
2、所有构造函数都是在定义时候就调用,定义以后的调用就不叫初始化了,而是赋值。
所以std[i](name[20],num,chinese,maths,english); 就是错误的。
3、解决方法:
你只能定义一系列指针,然后再每次构造的时候调用new来构造类对象。
如:
Student *std[5];
for(i=0;i<5;i++)
{
cin>>name[20]>>num>>chinese>>maths>>english;
std[i]=new Student(name[20],num,chinese,maths,english);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询