2017-07-09 1 views
1

Ich versuche, ein zweidimensionales Array mit einer konstanten Ganzzahl als die Grenzen zu deklarieren, aber dieser Fehler besteht immer noch.C++: Array-Größe in new-Ausdruck muss konstant sein

template <class Type> 
matrixType<Type>::matrixType(){ 
    h = maxSize; 
    w = maxSize; 
    matrix = new Type[maxSize][maxSize]; 
    defaultFill(); 
} 

Matrix wird wie erklärt:

Type* matrix; 

und maxSize deklariert als:

const int maxSize = 4; 
+1

Erwägen mit nur 'std :: VECTOR' (oder' std :: array' wenn Größe bei der Kompilierung festgelegt ist). Vergessen Sie alte C-artige Arrays. –

+1

Wie, wann und wo wird 'maxSize' deklariert und definiert? Können Sie uns ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zeigen? –

+0

In C sind 2D-Arrays Doppelzeiger, d.h. Zeiger von Zeigern. Sie müssen zuerst eine Liste von Zeigern zuweisen und dann für jeden Zeiger in der Zeigerliste eine Liste von Typ zuweisen. – jodag

Antwort

0

Kurz new Bediener eine folgende Syntax besitzt: new typename [items_count]. new Type[maxSize][maxSize] Ausdruck versucht Array von maxSize von Type[maxSize] Typ zuzuordnen und gibt einen Zeiger auf Type[maxSize] zurück. Es ist nicht möglich, ein mehrdimensionales Array mit neuen zu belegen. Die Verwendung von Type[maxSize] ist unzulässig, da maxSize zum Zeitpunkt der Kompilierung nicht bekannt ist. Wenn Sie ein mehrdimensionales Array zuweisen möchten, sollten Sie ein Array von Zeigern Type zuweisen und dann mit neu zugewiesenen Zeigern zu Arrays von Type füllen.

Type * * matrix = new Type *[maxSize]; 
for(size_t row = 0; maxSize != row; ++row) 
{ 
    matrix[row] = new Type[maxSize]; 
} 

oder als einzelnes Array

Type * matrix = new Type[maxSize * maxSize]; 
+0

'maxSize' sollte als konstanter Ausdruck in diesem Kontext verwendbar sein. –

+0

@PasserBy Auch wenn' maxSize' ein konstanter Ausdruck wäre, würde der Code von op nicht funktionieren, da der 'Matrix'-Typ sich vom neuen Ergebnis unterscheidet. – VTT

+0

Ich bin nicht dagegen, nur mit "Type [maxSize]" anzugeben ist legal –

Verwandte Themen