2014-12-05 120 views
0
class Base 
    { 
    public: 
     int i; 
     Base(int j):i(j){} 
    }; 

    int main() 
    { 
     Base B(10); 
     Base C[10](B);//throws error saying bad array initializer 
    } 

當我試圖編譯此代碼時,上面提到的錯誤被拋出。在對象數組上覆制構造函數

爲什麼C++不編譯這段代碼?

爲什麼每個對象都不能調用它的默認拷貝構造函數並使用B的成員值呢?

我錯過了C++標準中的東西嗎?

+1

你可以做到這一點與向量:'的std ::向量 V(10,底座(10));' – Borgleader 2014-12-05 14:18:34

+0

你可以使用一個初始化列表,但是這將沒有你想要的行爲 – Rerito 2014-12-05 14:22:05

+0

@leemes哎呀,是的,我的意思是。 **修正了它** – Borgleader 2014-12-05 14:22:08

回答

2
Base C[10](B); 

這是C++中的錯誤語法;您不能通過傳遞參數來初始化普通對象的數組。

0
Base C[10]; 

也不起作用。 您還需要聲明一個默認構造函數,如您所指定的那樣,將int作爲輸入,以便不生成默認構造函數。

0

至於我,我不明白爲什麼這樣的結構

Base C[10](B); 

或者例如以下

Base *C = new Base[10](8); 

不能有效的任何理由。它僅取決於你想如何定義語義。

但是,歷史上用於C++聚合的初始化的是使用brace-init列表。

所以,你可以寫

Base C[10]{ B, 8, 8, 8, 8, 8, 8, 8, 8, 8 };