2011-04-03 52 views
3

如何初始化一個私有數組,其中每個項目等於一個兩項數組,如{-1, 0}。由於我問你們所有人,我的代碼顯然不起作用。如何初始化一個私有多維數組

example.h文件:

#ifndef EXAMPLE 
#define EXAMPLE 

class Example { 
private: 
    char grid[10][10]; 
public: 
    Example(); 
}; 

#endif 

example.cpp:

#include "example.h" 
#include <iostream> 

Example::Example() : grid({-1, 0}) {} 

回答

5

這對C++來說目前是不可能的。 C++ 0x中,將有可能與支架,像

Example::Example() : grid{{-1, 0}} {} 

而且暫時,你可以用該數組中的一類,沒有任何性能損失(陣列將仍然是一個正常的,本地多維array)

class Example { 
private: 
    struct data { 
     char grid[10][10]; 
     static data newData() { 
     data d = {{ 
      { -1, 0 }, { -2, 1 } /* ... */ 
     }}; 
     return d; 
     } 
    } d; 

public: 
    Example() : d(data::newData()) { } 
}; 
+0

嗯。如果我願意妥協並初始化說'grid [10] [10] [2]'這200個項目都是0的地方呢? – 2011-04-03 22:24:08

+0

@Tyler然後你可以說'Example():grid(){}'。這工作正常。 – 2011-04-03 22:27:26

+0

嗯,我發現了一個非常相關的鏈接,您可以在答案中首先提到:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm – 2011-04-04 08:59:00

2

可惜你不能初始化成員這樣。您必須使用std::fill(或舊的=和一個循環)手動分配給構造函數主體中的每個值。

雖然這會在C++ 0x中發生變化,您可以在其中編寫與您發佈的代碼類似的代碼。 (你也有一個不匹配的問題,你需要聲明一個由10個字符組成的10個數組的數組,但是你的初始化嘗試與這個用例沒有任何相似之處,你不清楚你究竟是什麼試圖做,但因爲你將不得不使用不同的方法無論如何,我想這對這個答案並不重要。)

+0

它怎麼不清楚?你只是直接跳到代碼?我想要一百個像{-1,0}這樣的數組。因爲這是一個二維網格,所以10×10的網格只需要100個數組。 – 2011-04-03 22:19:37

+0

@泰勒:不,我讀了這個問題。目前還不清楚你想要做什麼,因爲代碼嘗試說的是與文本完全不同的東西。初始化嘗試是針對兩個元素的1D數組,而不是10x10個2D數組。 – 2011-04-03 22:20:52

+0

我也提到我知道代碼是不正確的。我認爲代碼示例可能會建立在我所說的內容上,但我想它並沒有按計劃進行。 :/ – 2011-04-03 22:25:43