C++ C++;:创建对象数组

C++ C++;:创建对象数组,c++,arrays,C++,Arrays,我有以下课程: class student { int rol , marks; char name[20]; public: student(int r , int m , char n[]) { rol = r; marks = m; strcpy(name,n); } int roll() { return rol; } }; 现在我尝试创建一个对

我有以下课程:

class student
{
    int rol , marks;
    char name[20];
    public:
    student(int r , int m , char n[])
    {
         rol = r;
         marks = m;
         strcpy(name,n);
    }
    int roll()
    {
        return rol;
    }
};
现在我尝试创建一个对象数组,如下所示:

student a[]= {(1,10,"AAA"),(2,20,"BBB"),(3,30,"CCC")}; // I get the error on this line
但我得到了这个错误信息:

错误:testing.cpp(40,56):无法将“char*”转换为“student[]”

当我这样做时:

student a(1,10,"AAAA");
student b(2,20,"BBBB");
student c(3,30,"CCCC");
student d[3]={a,b,c};
它工作得很好

@他说了很多。这就是我问题的解决方案:

我必须按如下方式初始化阵列:

student a[]= {
    student(1, 10, "AAA"),
    student(2, 20, "BBB"),
    student(3, 30, "CCC")
};
我的初始代码可能是错误的,因为构造函数一次不能创建多个对象。

在表达式中
(1,10,“AAA”)
表示应用逗号运算符。要初始化数组,必须提供可以初始化每个数组成员的表达式。因此,一种方法是:

student a[] = {
    student(1, 10, "AAA"),    // creates a temporary student to use as initializer
    student(2, 20, "BBB"),
    student(3, 30, "CCC") };
从C++11开始,您可以编写:

student a[] = {  {1, 10, "AAA"}, {2, 20, "BBB"}, {3, 30, "CCC"} };
因为C++11添加了一个特性,即可以通过括号内的初始值设定项列表调用对象的构造函数。这与您也可以在之后再写的原因相同:

a[0] = { 4, 40, "DDD" };

注意:如注释中所述,
char n[]
应该是
char const n[]
,您可以通过使用
std::string name来提高安全性而不是
字符名[20]

1<代码>学生::学生
第三个参数应该是
常量字符n[]
,和2。将
声明中的每个
替换为
{
),将每个
替换为
}
。@WhozCraig当我这样做时,我会收到大约10条错误消息,并包括您在问题中使用的任何精确工具链。或者,你也可以。