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条错误消息,并包括您在问题中使用的任何精确工具链。或者,你也可以。