如何调用结构数组以起作用?

时间:2019-05-22 07:32:02

标签: c++

我有一个试图在函数readFile中调用的struct employee数组。

我尝试使用指针进行调用,但是它们都失败了,并给出了相同的错误消息。

#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:错误:无法将参数'2'的'main():: employee *'转换为'employee *'到'int readFile(std :: ifstream *,employee *)'
    readFile(&inFile,array);

3 个答案:

答案 0 :(得分:5)

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

将其移到外部以在整个程序中具有统一的struct employee,并在struct employee函数内部创建main本地对象(创建时不是一个好习惯全局变量)。

  

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;
}

答案 1 :(得分:3)

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

这就是为什么编译器说无法将main()::employee*转换为employee*的原因:它试图将main-local类型转换为global类型(当然这是不可能的) )。

您应该做的是将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语言不同,它没有“标记名称空间”,类型名称与其他所有名称使用相同的作用域规则。

答案 2 :(得分:-2)

您的代码有很多错误,请首先更改此代码

int readFile (ifstream *inFile, struct employee array[]);

 int readFile (ifstream *inFile,  employee array[]);

第二次不要使用数组,因为使用预定义变量命名代码是违反标准的