我試圖做到以下幾點:如何在構造函數中初始化類的成員數組?
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 } { }
};
預-11不可能初始化比在塊範圍或靜態的自動和靜態的在名字空間域中其他陣列。
p_list[4] = {'A', 'B', 'C', 'D'};
那麼我該如何初始化一個數組呢?
使用正常初始化器列表語法:
sig::sig() : p_list{1, 2, 3, 4}
{ }
注意,在C++ 11這僅適用。在此之前,您需要使用boost::array
將其初始化爲一個函數。
如果你的編譯器不支持C++ 11初始化,那麼你必須每場separatly分配:
p_list[0] = A;
p_list[1] = B;
p_list[2] = C;
p_list[3] = D;
如果當前的編譯器還不支持C++ 11,你可以初始化使用標準算法和函數的矢量內容:
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];
};
上一個片段示例here。
是的,有點醜(至少對我來說看起來很醜)並且在編譯時不做這項工作;但是它在構造函數中完成了你需要的工作。
如果您需要其他類型的初始化(使用偶數/奇數進行初始化,使用隨機值進行初始化,以anoter值開始,等等......),您只需更改Functor,這是唯一的優點這個醜陋的方法。
可以使用-std = C++ 11或-std = GNU ++ 11選項
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`
}
初始化數組成員像這樣使用C++編譯器11我有C++ 10。所以我必須努力做到這一點。感謝你的回覆。 – 2012-07-23 10:23:09
是sig():聲明構造函數?如果它與問題的基本佈局相匹配,這個答案對初學者會更有幫助,所以我們可以看到構造函數是如何工作的。什麼是空的'{}'? – GreenAsJade 2016-08-13 02:19:06
爲什麼在初始化器之後沒有';'? – GreenAsJade 2016-08-13 02:25:31