函数调用出现问题

trouble with function calling

本文关键字:问题 函数调用      更新时间:2023-10-16

我有三个数组:一个字符串、一个整数和一个双精度。我需要通过从主函数调用它们到另一个函数来输出它们的内容。当我尝试构建程序时,显示员工信息出现"找不到标识符"的错误。这是我的代码:

#include <iostream>
#include <string> 
using namespace std;
const int numEmp = 5;
string names [numEmp];
int ages [numEmp];
double salaries [numEmp];
int main () {
    const int numEmp = 5;
    string names [numEmp];
    int ages [numEmp];
    double salaries [numEmp];
    for (int i = 0; i < numEmp; i++) {
        cout << "Enter Employee #" << i+1 << " Name: ";
        cin >> names [i];
        cout << "Enter Employee #" << i+1 << " Age: ";
        cin >> ages [i];
        cout << "Enter Employee #" << i+1 << " Salary: ";
        cin >> salaries [i];
    } 
    displayEmployeeInformation (names, ages, salaries, 5);
    getchar();
    getchar();
    return 0;
}
int displayEmployeeInformation (string names [], int ages [], double salaries [], int size) {
    for (int x = 0; x < numEmp; x++) {
        cout << "Employee #"  << x+1 << " Name: " << names [x] << ", Age: " << ages [x] << ", Salary: " << salaries [x];
    }
    return 0;
}

您需要为函数添加函数原型。把这条线

int displayEmployeeInformation (string names [], int ages [], double salaries [], int size);

以上int main() .

或者,将整个函数定义放在 int main() 以上。

正如拔示巴在一篇很好的回答中已经指出的那样,将函数定义放在main上面或声明一个函数原型。

我还认为您的函数返回类型可能会void,因为您没有对返回的值执行任何操作:

void displayEmployeeInformation(string names [], int ages [], 
                                double salaries [], int size) {
  for (int x = 0; x < numEmp; x++) {
    cout << "Employee #"  << x+1 << " Name: " << names [x] 
         << ", Age: " << ages [x] << ", Salary: " << salaries [x];
  }
}

首先要考虑到您定义了两次具有相同名称的数组:在全局命名空间中和在函数 main 的块范围内

//...
const int numEmp = 5;
string names [numEmp];
int ages [numEmp];
double salaries [numEmp];
int main () {
    const int numEmp = 5;
    string names [numEmp];
    int ages [numEmp];
    double salaries [numEmp];
/...

您可以勇敢地删除全局命名空间中的定义:)

对于函数调用,则函数声明应出现在函数使用之前。

您可以将函数声明放在 main 之前或 main 内部,但在任何情况下都放在函数调用之前。例如

int displayEmployeeInformation (string names [], int ages [], double salaries [], int size);
int main () {

此外,该函数也可以被贴花为具有 void 类型,因为返回的值没有很大的意义。

该函数可以声明为

void displayEmployeeInformation ( const string names [], const int ages [], const double salaries [], int size);

因此,最好定义一个结构数组,该数组将包含姓名,年龄和薪水的数据成员。