2012-10-11 29 views
-1

我正在使用C++ Builder,並在一些幫助後設置一個const int變量爲矢量的大小。從矢量大小錯誤的無符號整型數組錯誤

這裏是我的代碼工作,只是爲了告訴你什麼是不工作:

vector<appointment> appointmentVector = calCalendar.getAllAppointments(); 

const int sizeOfArray = 5; 
unsigned int arr[sizeOfArray]; 

如果我修改代碼如下所示:

vector<appointment> appointmentVector = calCalendar.getAllAppointments(); 

const int sizeOfArray = appointmentVector.size(); 
unsigned int arr[sizeOfArray]; 

我收到以下錯誤:

[BCC32 Error] Assessment2.cpp(357): E2313 Constant expression required

我可以請這個幫忙嗎?

UPDATE

我問的我有下面的代碼的問題這個問題:

unsigned int arr[2] = {1,8}; 
unsigned int days; 
TMonthCalendar->BoldDays(arr, 1, days); 
MonthBoldInfo = days; 

的BoldDays方法需要一個unsigned int數組,但在我只知道的價值觀運行。你可以請教我如何找到解決這個問題的方法嗎?

+0

請說明你真正的問題。這是你的第一個還是你的更新的問題? –

+0

pure-C中的數組*聲明*可以具有非常量大小,但不包含C++。使用一個std :: vector <>來代替,這一切都變得沒有意義。 – WhozCraig

回答

0

靜態數組需要編譯時間常量,因此第二個代碼將永遠不會編譯,因爲在編譯時數組的大小未知。將arr聲明爲向量或動態數組會更好。

這是基本的C++問題,建議您閱讀初學C++書。

0

與您的代碼的問題是,要指定一個非恆定的表達結果值(值在運行時評價),以一個常量變量,其值必須是從一個常量表達式產生的值(在評估值編譯時間)或文字。

爲了解決這個問題,你不應該使用constsizeOfArray

int sizeOfArray = appointmentVector.size(); 

而且,一旦你解決了上述問題,您應該創建一個動態分配的數組

unsigned int* arr = new unsigned int[sizeOfArray]; 

動態分配的數組允許您創建其元素數可以來自運行時值的數組。

0

常量表達式是編譯器可以計算出的值。在C++中,數組的大小是其類型的一部分,並且必須以常量表達式的形式給出。如果編譯器無法確定表達式具有的值,則不能將其用作數組類型的大小。你可以做的是在堆上分配一個「數組」,並使用一個指向其第一個元素的指針,就像通常使用數組名稱一樣。

相關問題