C++中类对象数组的初始化

以下是我是部分程序
先是对一个类的定义,请检查一下,我的结构函数正确吗?
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个回答  推荐于2016-11-26
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);本回答被提问者采纳

C++中类对象数组的初始化
1、当你定义了构造函数以后,默认的构造函数就不起作用了。所以你得类里边就没有默认的构造函数,即:没有没有参数的构造函数。所以Student std[5]; 是错误的。2、所有构造函数都是在定义时候就调用,定义以后的调用就不叫初始化了,而是赋值。所以std[i](name[20],num,chinese,maths,english); ...

c++中如何使用数组初始化对象?
在C++中,可以使用数组初始化对象。尽管并非完全支持,但C++以其灵活性,允许用户实现这一特性。对于自定义类型,C++11引入了列表式初始化功能,这得益于“std::initializer_list”工具类。通过使用此工具类,自定义类型也能支持列表式初始化。下面是一个示例,展示如何利用“std::initializer_list”来初始...

C++中五花八门的初始化
列表初始化是C++中用于初始化对象的一种方式。在C++98\/03中,普通数组和POD类型可以使用花括号{}进行初始化,而在C++11中,列表初始化得到广泛应用,不仅可以用于普通数组和POD类型,还可以用于其他类型对象的初始化。vector中使用圆括号和花括号进行初始化时,圆括号调用vector构造函数,花括号则尝试将值...

C++中, 类的私有数据成员在定义的时候不能进行初始化吗?
是的,C++中类的数据成员不管是不是私有的,都不能进行初始化。因为类就相当于一个数据的模板,是一种自定义组合的新数据类型,而不是一个变量。当程序声明一个类的时候,事实上并没有为程序申请存储空间,只有用这个类定义一个类对象的时候,才申请空间。连空间都没有,当然不能像定义变量一样的初...

C++中怎么初始化??
在C++中,利用花括号给数组初始化,如果花括号中给的初始值的个数不够,则会自动将未给出初始值的元素赋0。因此这样的赋值在结果上对的。例如 array[8] = {1};的结果是第一位初始化为1,剩余的元素初始化为0。另外,这种形式也可以为所有的元素赋0:array[8] = {};虽然第一种形式比较方便...

c++类对象数组初始化的几种方法
类对象数组初始化 如有一个如下类:class EquipmentPiece { private:int IDNumber;public:EquipmentPiece(int IDNumber) : IDNumber(IDNumber) {};};以下列出几种初始化的方法:<一>、对象数组 int ID1, ID2, ID3;EquipmentPiece bestPieces[] = { EquipmentPiece(ID1), EquipmentPiece(ID2), ...

c++如何建立对象数组
c++建立对象数组主要通过数组初始化来实现,其语法结构是数组名 = {对象1, 对象2, 对象3...};在您给出的实例中,定义了一个名为"employee"的对象数组e,其大小为6。数组的每个元素都是"employee"类的实例。数组的初始化使用了花括号{}。数组中的第一个元素被初始化为默认构造函数生成的对象,即...

如何定义类数组 c++
1:对象数组的定义:类名 数组名[元素个数]Eg: student asa[10];\/\/有10个元素的学生类对象数组 2:对象数组的访问形式:数组名[下标].成员名;Eg: asa[j].print();3:对象数组的初始化:对象数组的初始化通常也是由构造函数来完成的。

C++关于类中类成员变量是数组的问题,还有定义类对象是数组,问题在下面...
int elem;\/\/整形数组当前元素个数,初始为0,当elem等于时size,数组满 int *p;\/\/指向整形数组,动态分配空间 public:ListArray(int s=100)\/\/用初始化整形数组大小 { size=s;} void put(int n)\/\/将加入整形数组,elem自增1 { elem=(sizeof(p)\/sizeof(int));if(elem<size){ p[elem]=n;e...

c++11之前,只有静态常量整型数据成员才可以在类中初始化是为什么
1)不是对象的一部分 2)可以产生常量表达式,所以可以在类中初始化。---否则,用它作为数组的大小,就不合适了。静态常量整型数据成员,能够用来当作常量表达式使用,不在内部定义的话,则该常量表达式未定义,就不能使用了。C++11 非静态成员变量(常量),可以直接初始化,或者在初始化表中初始化。C+...

相似回答