1. ホーム
  2. c++

[解決済み] 式が定数に評価されませんでした - C++

2022-01-29 11:38:44

質問

10進数をbase2に変換するために以下のコードを書きました。 おそらくベストなものではありませんが、eclipse上で動作しました。 しかし、ビジュアルスタジオで実行しようとすると、10行目で次のようなエラーメッセージが表示されます(強調): "expression did not evaluate to a constant". なぜでしょうか?

long base2(int number) {
    int remainder, sizeOfRetNum, isNegative = 0;
    if (number<0)
        isNegative = 1;
    int temp = number;
    while (temp != 0) {
        sizeOfRetNum++;
        temp = temp / 2;
    }
    char ansString[sizeOfRetNum]; // ********line 10********
    int j = sizeOfRetNum - 1;
    while (number != 0) {
        remainder = number % 2;
        number = number / 2;
        if (remainder == 0)
            ansString[j] = '0';
        else
            ansString[j] = '1';
        j--;
    }
    long ansNum = atol(ansString);
    if (isNegative == 1)
        ansNum = -ansNum;
    return ansNum;
}

解決方法は?

char ansString[sizeOfRetNum]; 

可変長配列 で、C++では標準ではありません。 GCCのようないくつかのコンパイラは、拡張としてそれらを許可しますが、MSVSはそれらをコンパイルしません。

動的配列を取得するためには、ポインタと new

char* ansString = new char[sizeOfRetNum];

あるいはもっといいのは、この関数を作り直して std::string メモリ管理を代行します。