C++ 表达式的计算结果不是常数-c++;

C++ 表达式的计算结果不是常数-c++;,c++,C++,我编写了以下代码,用于将十进制数转换为base2。 可能不是最好的,但它在eclipse上工作。 然而,当我尝试在VisualStudio上运行它时,我在第10行(强调)得到了这样一条错误消息:“表达式的计算结果不是常量”。 为什么呢 long base2(int number) { int remainder, sizeOfRetNum, isNegative = 0; if (number<0) isNegative = 1; int temp

我编写了以下代码,用于将十进制数转换为base2。 可能不是最好的,但它在eclipse上工作。 然而,当我尝试在VisualStudio上运行它时,我在第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;
}
long base2(整数){
整数余数,sizeOfRetNum,isNegative=0;
如果(数字)

是C++中的一个标准,不是标准的。一些编译器,比如GCC允许它们作为扩展,但是MSV不会编译它们。 为了获得动态数组,您需要使用指针和

new

char* ansString = new char[sizeOfRetNum];

或者更好的方法是,重新编写函数以使用,它为您处理内存管理。

sizeOfRetNum
不是一个常量值,换句话说,它的值在编译时是未知的

当你要分配内存,直到运行时才知道值,你需要使用动态内存分配。这是用C++编写的,代码< >运算符new < /C>。


char-ansString[sizeofrentum];
更改为
char*ansString=new char[sizeofrentum];
。别忘了调用
delete[]ansString;
,否则您将出现内存泄漏。

以上解决方案适用于char类型。如果您使用不同的类型,例如double或float或任何其他用户定义的类型,则不会出现这种情况

double sample_float_array (n+1) //suppose n is a number passed in the functions
要完成您想要完成的任务,并在MSV中编译,您可能需要像下面这样编写

std::vector <double> sample_float_array;
sample_float_array.resize (n+1);
std::向量采样浮点数数组;
sample_float_array.resize(n+1);

希望这能有所帮助。干杯

如果你想在C实现中使用malloc,你可以使用malloc而不是new。如果你不想,你可以像@NathanOliver指出的那样使用std::string

char*ansString;//*******第10行********


ansString=(char*)malloc(sizeOfRetNum*sizeof(char));//**********第11行*********

如果类型是double而不是char怎么办?我遇到了同样的错误,类型无关紧要。在可移植代码中不能使用可变长度数组。对于不是字符串的类型,使用
std::vector
,对于那些类型,使用
std::string
std::vector <double> sample_float_array;
sample_float_array.resize (n+1);