2010-12-05 42 views
0

我在將以下代碼從C++轉換爲c#因爲指針而出現問題。將一些C++數組代碼轉換爲c#

基本上我有一個

STATE** State; 
States = new STATE* [max_states]; 

for (int i=0; i < max_states; i++) { 
    States[i] = new STATE(max_symbols); 
} 

如果這是一些雙陣列我想說

STATE[][] States; 
States = new STATE[max_states][]; 

for (int i = 0; i '<' max_states; i++) { 
    States[i] = new STATE[max_symbols]; 
} 

但問題是C++代碼不工作「爲」我預料到。

States[i] = new STATE(max_symbols); 

有一些怪異的行爲,例如允許

States[cur_state]->set_recur_out(k); 

究竟還是看不到?這可能是一個初學C++的問題。很抱歉,如果我不作任何意義=)

回答

3

它不是一個二維陣列,但包含指向單個元件一維陣列...
new STATE(max_symbols)構造一個單個狀態對象,調用構造它只接受一個參數(在這裏是max_symbols)。

我不具有的C#多線索,但以下應該是C++代碼的C#中的正確的表示:

STATE[] States; 
States = new STATE[max_states]; 

for (int i = 0; i '<' max_states; i++) { 
    States[i] = new STATE(max_symbols); 
} 
+0

謝謝,解決了我的問題 – foobar 2010-12-05 14:36:11

1

這僅僅是一個指針數組。在C#,這將是一個一維數組:

STATE[] States = new STATE[max_states]; 

for (int i = 0; i < max_states; i++) { 
    States[i] = new STATE(max_symbols); 
} 

的「奇怪的行爲」你看到在C++是僅僅訪問一個指針的成員的類型的C++方法:

Type* x; 
x->y(); 
// is the same as: 
(*x).y(); 
// and corresponds to: 
Type z; 
z.y();