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