我编写了以下代码,将十进制数转换为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/