c++ - 根据用户输入定义缓存大小

标签 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

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

最佳答案

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

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

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

关于c++ - 根据用户输入定义缓存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16358204/

相关文章:

c++ - 实例化 COM 和 ATL 类型

c++ - DrawText 和文本裁剪

c++ - 为什么我的编译器在我尝试清除 cin 缓冲区时提示

c++ - Qt 中的音频回调

c# - 导致错误的 ASP.NET 页面指令

visual-studio-2010 - VS2010代码分析,有什么方法可以自动修复某些警告?

java - 无法借助 JNA 库访问内存引用

c++ - 我可以将列表放入结构中吗?

c++ - 是否可以在 VS Express 2010 中构建 ATL 项目

c# - 有没有办法让本地 C++ API 和托管 C++\CLI API 包装它具有相同的 namespace 和类名称