0

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

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

请告诉是否有另一种方法来做这件事

4

2 回答 2

3

数组必须具有编译时固定大小。如您所见,您的size变量在运行时可能会根据 的值而变化CACHE_SIZEoption[0]。相反,您应该使用运行时大小的容器,例如std::vector.

std::vector<long> tags(size);

请注意,您#define可能没有做您期望的事情。宏在预处理阶段被扩展。如果您CACHE_SIZE在代码中的任何其他地方使用,它将size在您的代码编译之前替换为。如果这些地方没有size变量,你会得到一个错误。它没有设置为代码中该点CACHE_SIZE的值。size

于 2013-05-03T11:51:40.960 回答
2

当您使用它时#define,这是一个预处理器指令,而不是 C++ 语言的一部分。预处理器在编译器之前运行并进行简单的文本替换。

您的编译器将看到的是

long tags[size];

这是一个可变长度数组,在 C++ 中不受支持。

于 2013-05-03T11:52:59.320 回答