【发布时间】:2018-02-23 16:36:54
【问题描述】:
所以在这里我有一部分代码在其中定义了宏来将标识符 MIN_BIT 设置为基于用户输入的值:
#define MIN_BITS(n) 1*n
int MIN_BIT = MIN_BITS(n);
然后我在主函数中获取用户输入的“n”值。
现在,我有一个函数来获取 LSB,将其排列在一个数组中,然后以相反的顺序打印该数组,因此 MSB 在左侧:
void print_binary( unsigned number )
{
unsigned bits [ MIN_BIT ] ; // <-- error here
int count = 0 ;
while( number>0 || count < MIN_BIT )
{
bits [count] = number % 2;
number >>= 1;
count++;
}
for( int i = count -1; i >=0; i--)
cout << bits[i];
}
但是,在上面代码中标记为 1 的行上,我得到一个错误“表达式必须有一个常量值”。变量 MIN_BIT 的值不能用作常量。
请提出解决此问题的方法,或以不同方式实施此问题的方法。
【问题讨论】:
-
C++ 默认不进行惰性求值。一旦
MIN_BIT被创建,当你改变n的值时它的值不会改变。 -
哎呀!!这里有很多需要改变的地方
-
那么,您得到的错误是不言自明的。如果您需要一个大小取决于运行时值的连续数组,请使用
std::vector。 -
请注意常量和编译时常量之间的区别。编译时常量是一个常量,其值在编译时已知,根据定义,在可以接收任何用户输入之前。在这种情况下,
MIN_BIT需要是编译时常量。在大多数情况下,如果您需要一个仅在运行时知道其大小的容器,请使用std::vector<T>。 -
@AngryDuck 哎呀,很抱歉代码没有被正确淹没..:(
标签: c++ visual-c++ functional-programming visual-studio-macros