2017-07-09 7 views
1

定数として整数を使用して2次元配列を宣言しようとしていますが、このエラーは引き続き発生します。C++:new-expressionの配列サイズは一定でなければならない

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

マトリックスはとして宣言される:

Type* matrix; 

とmaxSizeのは、以下のように宣言される:new typename [items_count]

const int maxSize = 4; 
+1

としてはちょうど 'のstd :: vector'使用(または'のstd ::のサイズがコンパイル時に固定されている場合array')を考えます。古いCスタイルの配列は忘れてしまいます。 –

+1

'maxSize'はどのように、いつ、どこで宣言され定義されていますか?あなたは私たちに[最小、完全で、そして証明可能な例](http://stackoverflow.com/help/mcve)を見せてもらえますか? –

+0

Cの2D配列は、ダブルポインタ、つまりポインタのポインタです。ポインタのリストを最初に割り当て、ポインタのリスト内の各ポインタにTypeのリストを割り当てる必要があります。 – jodag

答えて

0

簡潔にはnewオペレータは、以下の構文を有します。 new Type[maxSize][maxSize]式はmaxSizeの配列をType[maxSize]型に割り当てようとし、Type[maxSize]へのポインタを返します。多次元配列をnewで割り当てることはできません。 Type[maxSize]を使用すると、コンパイル時にmaxSizeが認識されないため、不正です。多次元配列を割り当てる場合は、Typeへのポインタの配列を割り当ててから、Typeの配列への新たに割り当てられたポインタをそれに書き込む必要があります。

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

または単一のアレイ

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

'maxSize'はこのコンテキストで定数式として使用可能です –

+0

@PasserBy' maxSize'が定数式であっても、 'matrix'型が新しい結果と異なるため、opのコードは動作しません。 – VTT

+0

私はそれに反対していません、単にタイプ[maxSize]を使って指摘しても合法です –

関連する問題