1

そのため、可変サイズの新しい配列を作成できないという問題があります(変数はとして宣言されていますconst int

これがコードです

#include <iostream>
#include <string>

int newArraySize;

int main ()
{
   std::cin >> newArraySize;

   int const fin = newArraySize;

   int deduped[fin]; // Here is the error
}

私が得ているエラーは

エラー:式には定数値が必要です

定数としてキャストしようとしましたが、それでも運がありません(同じエラー)

int const fin = const_cast<int const&>(newArraySize);
int deduped[fin]; 
4

2 に答える 2

3

C++ には (紛らわしいことに) 2 つの形式のconst. あなたfinは1つのタイプですが、何かが配列のサイズになるためにはもう1つのタイプが必要です。もう 1 つの型は、新しく と呼ばれconstexpr、以前は「コンパイル時の定数」でした。ご覧のとおり、すべての配列は、C++ のコンパイラに認識される固定サイズでなければなりません。したがって、 variable を作成するだけでは十分ではなく、コンパイラーもconstを把握できる必要があります。したがって、コンパイル時の定数式である必要があります。または、できれば によって管理される動的配列を使用する必要がある可能性が高くなります。newArraySizestd::vector

std::vector<int> deduped(newArraySize);

を使用できない場合はvector、他の (より悪い) オプションがありますstd::unique_ptr<int[]>。実際に使用しています。int* deduped=new[newArraySize]();delete deduped;

于 2013-03-03T20:04:59.527 に答える
-1

newArraySizeconstとして宣言されていません。そうすればうまくいくでしょう。

于 2013-03-03T19:57:37.247 に答える