2011-01-11 15 views

Antwort

6

ein Array von Arrays unterscheidet sich von einer Anordnung von Zeigern auf Arrays. In Ihrem Fall können Sie nicht den korrekten Typ zurückgeben, ohne dass die Breite Ihres Arrays (y) in Ihrer öffentlichen Schnittstelle veröffentlicht wird. Ohne dies weiß der Compiler nicht, wie breit jede Zeile des zurückgegebenen Arrays ist.

könnten Sie versuchen, die folgenden:

class Sample 
{ 
public: 
    static const int x = 8; 
    static const int y = 10; 
    typedef char Row[y]; 
    Row *get2D(); 

private: 
    char two_d[x][y]; 
}; 
0

Weit besser wäre, dies zu tun:

const char& operator()(int x1, int y1) 
{ 
    // Better to throw an out-of-bounds exception, but this is illustrative. 
    assert (x1 < x); 
    assert (y1 < y); 
    return two_d[x][y]; 
}; 

Dieser Schutz Nur-Lese-Zugriff auf die Array-Interna erlaubt (überprüfbar!).

+0

Und noch besser wäre es, nur die Boost Matrix-Bibliothek zu verwenden! http://www.boost.org/doc/libs/1_36_0/libs/numeric/ublas/doc/matrix.htm – EmeryBerger

+0

+1, obwohl ich nicht zustimme, ist es besser, Ausnahme zu werfen. Du solltest beides tun. Assert, dann Ausnahme. Ausnahmen sind schwer in den Wurfpunkt zurückzuverfolgen. Asserts lösen im Allgemeinen einen implementierungsdefinierten Unterbrechungspunkt aus, der mit dem Debugger eingegeben werden soll. –