C ++:创建一个对象数组

时间:2015-04-04 04:01:54

标签: 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;
    }
};

现在我正在尝试创建一个像这样的对象数组:

student a[]= {(1,10,"AAA"),(2,20,"BBB"),(3,30,"CCC")}; // I get the error on this line

但我收到此错误消息:

  

错误:testing.cpp(40,56):无法转换' char *'到学生[]'

当我这样做时:

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

效果很好。

@WhozCraig很多。这是我的问题的解决方案:

我必须按如下方式初始化数组:

student a[]= {
    student(1, 10, "AAA"),
    student(2, 20, "BBB"),
    student(3, 30, "CCC")
};

我的初始代码错误可能是因为构造函数不能一次创建多个对象。

1 个答案:

答案 0 :(得分:0)

表达式(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;代替char name[20];来提高安全性。