使用函数传递的最大元素初始化数组

时间:2012-01-24 19:12:41

标签: c++ arrays

我正在上学,我应该编写一个函数来接受为公司工作的员工数量并将值返回给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];
}

4 个答案:

答案 0 :(得分:3)

  

[...]我不断收到关于我在括号之间放入的变量的错误,即使它是不变的!

它必须是编译时常量;也就是说,编译器需要能够以int workers [max]之类的方式静默替换int workers [10]。在您的设计中,它取决于函数的参数,直到运行时才知道。

有几种不同的方法可以解决这个问题,但最好的方法是使用std::vector<int>而不是int[]

std::vector<int> workers;

(确保#include <vector>位于您的计划顶部。

答案 1 :(得分:1)

实际上,变量需要是一个编译时常量,而你的值不是。例如,文字整数类型或enum

在这种情况下,很容易使用vector代替:

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

答案 2 :(得分: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
}

答案 3 :(得分:0)

您无法在C ++中声明可变大小的数组。你必须动态分配内存。使用new运算符:

int* workers = new int[max];

完成后,应使用delete运算符释放内存以防止内存泄漏:

delete [] workers;