我编写了以下代码,将十进制数转换为base2。
可能不是最好的,但是它可以在 eclipse 上工作。
但是,当我尝试在Visual Studio上运行它时,在第10行(强调)上得到了以下错误消息:“表达式的计算结果不为常数”。
这是为什么?

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];

Variable Length Array,在C++中不是标准的。一些编译器(例如GCC)允许将它们作为扩展,但MSVS不会编译它们。

为了获得动态数组,您将需要使用指针和new
char* ansString = new char[sizeOfRetNum];

或者更好的是,重新使用该函数以使用 std::string ,它可以为您处理内存管理。

关于c++ - 表达式未求出常数-c++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33423502/

10-13 08:25