0

Visual Studio 2012 を使用しています

私の目標:

ユーザーは配列サイズを指定します->関数はconst変数にデータを返します->配列を作成します。可能です?

ここに私のコードスニペットがあります:

const int user_get_array_size()
{
int a;
bool blokada;

do
{
    cout << "Podaj wielkość tablicy: ";
    cin >> a;

    //Jeśli cin nie mógł zapisać danych do inta.
    //Lub wielkość tablicy mniejsza od 1? (Po co nam analizować coś co ma )
    if(cin.fail() || a < 2)
    {
        blokada = true;


        //Czyszczenie Cina z syfów.
        //Cin wchodzi char by char
        //while(cin)
        //{
            cin.clear(); //Czyszczenie CINA
        //}

        cin.ignore();

        system("CLS");
        cout << "Wielkość tablicy musi być liczą wiekszą od 1 \n(Wkońcu ten program ma coś analizować.) \n";
    }
    else
    {
        blokada = false;
    }
}
while(blokada);



return a;
}


const int w_array = user_get_array_size();

int tablica[ w_array ];

エラーが発生しました:式には定数値が必要ですか?

私のせいはどこですか?

4

1 に答える 1

2

次のように初期化const int w_arrayすると:

const int w_array = 100;

100コンパイル時に知られているように、問題はありません。ただし、w_array実行時にのみ認識される関数からの戻り値で初期化します。w_arrayしたがって、コンパイル時に値を知る必要があるため、配列宣言では使用できません。

コードを修正する最も簡単な方法は、次を使用することstd::vectorです。

std::vector<int> tablica(w_array);

constC++ では扱いにくいことに注意してください。リテラルで初期化すると、定数式を必要とするコンテキストで使用できます。実行時にのみ認識される値で初期化すると、読み取り専用の変数になりますが、定数式を必要とするコンテキストでは使用できません。

また、一部の問題はconstexprC++11 の関数で解決されています。ただし、Visual Studio はまだこれをサポートしていません。また、コードにはユーザーからの入力が必要なため、とにかく使用することはできません。

于 2013-06-08T21:28:39.840 に答える