2017-08-20 91 views
0

我是新近使用C++中的lambda函數的概念。我的目標是使用lambda函數初始化靜態數據成員的對象數組。下面是我的代碼 -使用lambda函數初始化靜態數據成員

#include <iostream> 
class B 
{ 
    public: 
    B() {std::cout << "B Called" <<std::endl;} 
    B(int y){std::cout << "B int Called" <<std::endl;} 
}; 
class A 
{ 
    public: 
    A(){std::cout << "Called" << std::endl;} 
    static B bobj[256]; 
}; 

B bobj[256] = []() {for (int i = 0 ; i < 256; i++) { bobj[i] = new B(2)}}; 

int main() 
{ 
    A a; 
} 

但我得到的編譯錯誤運營商=「的曖昧過載'(操作數類型是‘B’和‘B *’)」等。

如何編碼一個lambda函數來初始化一個對象數組?

+0

其實我有一個模板類。類類型將被傳遞用於其創建,並且需要創建其類型的數組 - 對象數組將被用於預先設計的有限可用數據。 – Prakash

+0

爲什麼你不能在'if' bobj [0] == nullptr''的控制下在'A'的構造函數中完成這個工作? – paxdiablo

+0

原因是在這種情況下,它是B類,但實際上A是一個模板類 - 它可以是任何類類型 - https://stackoverflow.com/questions/45778336/initialise-large-static-class-array – Prakash

回答

1

我認爲至少看到一個你的問題。你的bobj定義是B對象的數組:

B bobj[256] 

然而,你正在試圖分配指針到-B它(通過使用new):

bobj[i] = new B(2) 

我相信這是您顯示錯誤的原因,ambiguous overload for 'operator=' (operand types are 'B' and 'B*')。你提到的「其他」我無法真正評論,因爲你沒有向我們展示過它們:-)