2015-04-04 158 views
1

我有下面的類的數組:C++:創建對象

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 

但我收到此錯誤信息:

Error: testing.cpp(40,56):Cannot convert 'char *' to 'student[]'

當我這樣做:

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

它完美的工作。

@WhozCraig Thx很多。這是解決我的問題:

我不得不數組初始化如下:

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

我最初的代碼是錯誤可能是因爲構造函數不能在同一時間創造超過1個對象。

+0

1.'student :: student'的第三個參數應該是'const char n []',並且2.在'a []中用'}替換每個'('''''''''聲明。 – WhozCraig 2015-04-04 04:10:00

+0

@WhozCraig當我這樣做時,我得到了大約10條錯誤消息 – 2015-04-04 04:13:22

+0

[**看到它現場**](http://ideone.com/LWMd5w),並在你的問題中包括你正在使用的* exact *工具鏈* *。或者,您可以[也只是這樣做](http://ideone.com/pGfsww)。 – WhozCraig 2015-04-04 04:15:16

回答

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];提高安全性。