如何将结构数组调用以函数

How to call a struct array to function?

本文关键字:调用 函数 数组 结构      更新时间:2023-10-16

我有一系列struct雇员,我试图在函数 readFile中调用。

我尝试使用指针来打电话,但它们都失败了,并给我相同的错误消息。

#include <iostream>
#include <fstream>
using namespace std;
int readFile (ifstream *inFile, struct employee array[]);
int main () {
    int size = 10;
    struct employee {
        string name;
        int id;
        float salary;
    } array[size];
    ifstream inFile;
    readFile(&inFile, array);
    return 0;
}
int readFile (ifstream *inFile, struct employee array[]) {
    inFile->open("pay.txt");
    if(inFile->fail()) {
        cout << "fail";
        exit(1);
    } else {
        cout << "success";
    }
    return 0;
}

我收到的错误消息是:

.cpp:16:25:错误:无法将'main((::雇员*'to'formemee*'for gright'2'转换为'int readfile(std :: ifstream*,雇员*('
readfile(&amp; infile,array(;

您的 struct employee local 到您的 main函数,而另一个是 global ,因此它不能将'main()::employee*'转换为'employee*',因为两者都是不同种类。

将其移到外部,以在整个程序中具有统一的struct employee,并在main函数中创建struct employee的本地对象(不是创建A Global variable 的好习惯(。

顺便说一句,在C++中,您无需在任何地方附加struct 使用已经定义的结构。您的原始帖子看起来更像是C中的编程

#include <iostream>
#include <fstream>
using namespace std;
struct employee {
        string name;
        int id;
        float salary;
};
int readFile (ifstream *inFile, employee array[]);
int main () {
    int size = 10;
    employee array[size];
    ifstream inFile;
    readFile(&inFile, array);
    return 0;
}
int readFile (ifstream *inFile, employee array[]) {
    inFile->open("pay.txt");
    if(inFile->fail()) {
        cout << "fail";
        exit(1);
    } else {
        cout << "success";
    }
    return 0;
}

您的代码中有两个名为employee的类。一个是在函数readFile声明中声明(未定义(的全局名称空间。名为employee的另一个类是在main函数中本地定义的。这两种是绝对无关的类型。

这就是为什么编译器说它不能将main()::employee*转换为employee*:它试图从main-局部类型转换为全局类型(当然是不可能的(。

您应该做的是将struct employee的定义移动main之外,以便main创建全局类型的对象:

#include <iostream>
#include <fstream>
using namespace std;
struct employee {
    string name;
    int id;
    float salary;
} array[size];
int readFile (ifstream *inFile, employee array[]);
int main () {
    int size = 10;
    employee array[size];
    ifstream inFile;
    readFile(&inFile, array);
    return 0;
}
int readFile (ifstream *inFile, employee array[]) {
    inFile->open("pay.txt");
    if(inFile->fail()) {
        cout << "fail";
        exit(1);
    } else {
        cout << "success";
    }
    return 0;
}

还要注意,在C 中,编写struct employee并不是(也不常见(,只有employee就足够了(就像我在上面的代码中所做的那样(。与C中不同,没有"标签名称空间",类型名称使用与其他所有内容相同的范围。