在用户输入上定义缓存大小

时间:2013-05-03 11:47:11

标签: c++ visual-studio-2010 c++-cli

我使用以下代码根据用户输入设置缓存大小

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

请告诉我是否还有其他方法可以做这件事

2 个答案:

答案 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 ++中不受支持。