我有以下课程:
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")
};
我的初始代码错误可能是因为构造函数不能一次创建多个对象。
答案 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];
来提高安全性。