我使用以下代码根据用户输入设置缓存大小
int size=1024;
Console::WriteLine("Select the Cache Size.\n a. 1 Kb \n b. 2 Kb \n c. 4 Kb \n d. 8 Kb\n");
String^ CACHE_SIZEoption = Console::ReadLine();
//Char wh=CACHE_SIZEoption->ToChar();
switch(CACHE_SIZEoption[0])
{case 'a':{
size= 1024;
break;}
case 'b':{
size=2048;
break;}
case 'c':{size= 4096;
break;}
case 'd':{size=8192;
break;}
default: {Console::WriteLine("Wrong Input");}
}
#define CACHE_SIZE size
long tags[CACHE_SIZE];
错误发生在最后一行“long tags [CACHE_SIZE]”
expected constant expression
cannot allocate an array of constant size 0
请告诉我是否还有其他方法可以做这件事
答案 0 :(得分:3)
数组必须具有编译时固定大小。如您所见,size
变量在运行时可能会有所不同,具体取决于CACHE_SIZEoption[0]
的值。相反,您应该使用运行时大小的容器,例如std::vector
。
std::vector<long> tags(size);
请注意,您的#define
可能没有达到预期效果。宏在预处理阶段得到扩展。如果您在代码中的任何其他位置使用CACHE_SIZE
,则在编译代码之前,它将替换为size
。如果这些地方没有size
变量,您将收到错误消息。 将CACHE_SIZE
设置为代码中该size
的值。
答案 1 :(得分:2)
当您使用#define
时,它是预处理程序指令而不是C ++语言的一部分。预处理器在编译器之前运行,并进行简单的文本替换。
您的编译器将看到的是
long tags[size];
这是一个variable length array,在C ++中不受支持。