2010-12-05 10 views
0

Ich habe einige Probleme beim Konvertieren des folgenden Codes von C++ nach C# wegen Zeigern. GrundsätzlichKonvertieren einige C++ - Array-Code in C#

Ich habe ein

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

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

Wenn dies einige Doppel Array würde ich

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

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

sagen Aber das Problem ist die C++ Code nicht funktioniert „wie“ ich es erwartet hatte.

States[i] = new STATE(max_symbols); 

Hat ein seltsames Verhalten, dass zum Beispiel

States[cur_state]->set_recur_out(k); 

was erlaubt genau bin ich nicht zu sehen? Dies könnte eine Anfänger-C++ - Frage sein. Sorry, wenn ich mache keinen Sinn überhaupt nicht =)

Antwort

3

es ist kein 2d-Array, aber ein 1d-Array Zeiger auf einzelne Elemente enthält ...
new STATE(max_symbols) konstruiert einen einzigen STATE Objekt, den Konstruktor aufrufen Das nimmt ein einzelnes Argument (in diesem Fall max_symbols).

ich habe nicht so viel Ahnung von C#, aber die folgenden sollte die korrekte Darstellung des C++ Code in C# sein:

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

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

danke, dass mein Problem gelöst hat – foobar

1

Das ist einfach ein Array von Zeigern. In C#, dass eine eindimensionale Anordnung wäre:

STATE[] States = new STATE[max_states]; 

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

Das „seltsame Verhalten“, die Sie in der C++ sehen, ist einfach die C++ Art und Weise ein Mitglied eines Zeigers auf eine Art von Zugriff:

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