2012-01-24 57 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; 

相关问题