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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
请求帮助啊!!~~~~~~着急!~

参考技术A 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++中类对象数组的初始化的主要内容,如果未能解决你的问题,请参考以下文章

C++对象数组与对象指针

在 C++ 中对象数组的定义处设置类对象数组的初始值

在 C++ 中初始化对象数组时出错

C++ 对象数组初始化

C++中带括号的数组对象的初始化

C++ VS调试问题,怎么显示一个对象数组的所有对象的信息