我正在尝试做以下事情:
class sig
{
public:
int p_list[4];
}
sig :: sig()
{
p_list[4] = {A, B, C, D};
}
我遇到了一个错误
构造函数中缺少表达式。
那么我该如何初始化一个数组?
我正在尝试做以下事情:
class sig
{
public:
int p_list[4];
}
sig :: sig()
{
p_list[4] = {A, B, C, D};
}
我遇到了一个错误
构造函数中缺少表达式。
那么我该如何初始化一个数组?
仅适用于 C++11:
class sig
{
int p_list[4];
sig() : p_list { 1, 2, 3, 4 } { }
};
在 C++11 之前,不能在块作用域内初始化除自动和静态数组以外的其他数组,也不能在命名空间作用域内初始化除静态数组以外的其他数组。
sig::sig() : p_list{1, 2, 3, 4}
{ }
boost::array
并在函数内部初始化它。p_list[0] = A;
p_list[1] = B;
p_list[2] = C;
p_list[3] = D;
class sig
{
public:
sig()
{
struct Functor
{
Functor() : value(0) {};
int operator ()() { return value++; };
int value;
};
std::generate(p_list, p_list + 4, Functor());
}
int p_list[4];
};
之前的代码示例在这里。
是的,这种方法有点丑(至少对我来说看起来很丑),并且不能在编译时完成工作;但是它可以在构造函数中完成你需要的工作。
如果你需要其他类型的初始化(使用偶数/奇数进行初始化、使用随机值进行初始化、从另一个值开始等),你只需要更改Functor,这是这种丑陋方法的唯一优点。
struct student {
private :
int marks[5];
public :
char name[30];
int rollno;
student(int arr[], const char *name, int rno):marks{arr[0], arr[1], arr[2], arr[3], arr[4]}{
strcpy(this->name, name);
this->rollno = rno;
}
void printInfo() {
cout <<"Name : "<<this->name<<endl;
cout <<"Roll No : "<<this->rollno<<endl;
for(int i=0; i< 5; i++ ) {
cout <<"marks : "<<marks[i]<<endl;
}
}
};
int main(int argc, char *argv[]) {
int arr[] = {40,50,55,60,46};
//this dynamic array passing is possible in c++11 so use option -std=c++11
struct student s1(new int[5]{40, 50, 55, 60, 46}, "Mayur", 56);
//can't access the private variable
//cout <<"Mark1 : "<<s1.marks[0]<<endl;
s1.printInfo();`enter code here`
}
p_list[4] = {'A', 'B', 'C', 'D'};
;
? - GreenAsJadesig(float p[4]) : p_list{p[0], p[1], p[2], p[3]}
,但这似乎很笨拙。或者只是使用memcpy? - schrödinbug