2012-01-24 58 views
1

我正在爲學校工作,我應該編寫一個函數,接受爲公司工作的員工數並將值返回給main。用函數傳遞的最大元素初始化數組

然後我寫一個main函數,它接受爲公司工作的員工數量。然後,我應該詢問每個員工在該職能中缺席的天數,並返回錯過的天數。

我在第二部分有問題。我試圖創建一個數組的僱員人數作爲元素的最大數量,但我不斷收到一個關於我放在括號之間的變量的錯誤,即使它是一個常量!

我對數組有點模糊,這是一個複習課程。如果我可以創建一個數組,我會使用for循環遍歷每個元素並存儲每個元素中缺少的天數。

感謝您的幫助, 亞倫

#include <iostream> 
using namespace std; 

int noOfEmployees(); 
int daysAbsent(int); 

int main(){ 
    int employees; 

    employees = noOfEmployees(); 
    daysAbsent(employees); 

    system("pause"); 
    return 0; 
} 

int noOfEmployees(){ 
    int employees; 
    cout<<"Please enter number of employees/n"; 
    cin>>employees; 
    return employees; 
} 

int daysAbsent(int employees){ 
    const int max = employees; 
    int daysMissed; 
    int workers [max]; 
} 

回答

1

int workers[max];是不合法的C++,因爲陣列(max)的大小是不是編譯時間常數。儘管變量max在構造後被聲明爲常量,但它在運行時從參數構造到daysAbsent,因此在編譯時不知道大小。

如果你想有一個可變大小的數組,嘗試std::vector

#include <vector> 
int daysAbsent(int employees) { 
    const int max = employees; 
    int daysMissed; 
    std::vector<int> workers(max); 
    cin>>daysMissed; 
    //Use workers somewhere in here 
} 
+0

我試過這個,但它說名稱空間標準沒有成員向量。 – sircrisp

+0

您是否在文件頂部包含#include ? – Mankarse

+0

不!謝謝,我會試試這個,還沒有得到載體:p – sircrisp

0

你也不會在C聲明變量大小的數組++。你將不得不動態分配內存。使用new操作爲:

int* workers = new int[max]; 

當你完成,你應該釋放內存以防止內存泄漏,使用delete操作:

delete [] workers; 
+0

感謝您教我一些新的操作員! – sircrisp

+2

不要這樣做。避免內存泄漏的正確方法是將資源包裝在管理其生命週期的類中,然後使用自動存儲持續時間實例化該類。對於大多數目的而言,標準庫中的'std :: vector'是一個適用於動態數組的適當類。 – Mankarse

1

事實上,該變量必須是一個編譯時間常數,你的價值不是。例如文字整數類型或enum

在這種情況下但它很容易使用vector代替:

int daysAbsent(int employees) { 
    const int max = employees; 
    int daysMissed; 
    std::vector<int> workers(max); 
    cin>>daysMissed; 
} 
3

[&hellip;]我不斷收到一個錯誤關於我放在括號之間不是恆定的,即使它是變量!

它需要是編譯時間常量;也就是說,編譯器需要能夠以int workers [10]的方式靜靜地替換int workers [max]。在你的設計中,它依賴於該函數的參數,該參數在運行時才知道。

有幾種不同的方式來處理這個問題,但最好的可能是使用std::vector<int>而非int[]:(在程序的頂部是一定要#include <vector>

std::vector<int> workers; 

相關問題