2013-05-03 50 views
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]; 

是在最後一行中產生的誤差來設置緩存大小,「長標籤[CACHE_SIZE]」

expected constant expression 
cannot allocate an array of constant size 0 

請告訴我們,如果有另一種方式做這件事情

回答

3

數組必須有一個編譯時固定的尺寸。如您所見,您的size變量在運行時會有所不同,具體取決於CACHE_SIZEoption[0]的值。相反,您應該使用運行時大小的容器,例如std::vector

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

請注意,您的#define可能不符合您的期望。宏在預處理階段被擴展。如果在代碼中的任何其他位置使用CACHE_SIZE,則在代碼編譯之前將用size代替它。如果在這些地方沒有size變量,則會出現錯誤。它設置CACHE_SIZE是在您的代碼中的那個點size的值。

+0

我已經使用此std :: vector 標籤[size];給錯誤錯誤C2039:'vector':不是'std'的成員 – 2013-05-03 12:02:30

+2

@HanyaIdrees你需要'#include '並且注意它是'(size)'而不是'[size]'。您將大小傳遞給它的構造函數。 – 2013-05-03 12:03:40

+0

好吧,如何將大小傳遞給它的構造函數。 – 2013-05-03 12:08:51

2

當您使用#define這是一個預處理指令而不是C++語言的一部分。預處理器在編譯器之前運行,並進行簡單的文本替換。

你的編譯器將看到的是

long tags[size]; 

這是variable length array和C不支持++。

+0

我正在使用Visual c + +,那麼我應該爲此做什麼.. – 2013-05-03 12:03:09