我有一个试图在函数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);
答案 0 :(得分:5)
您的struct employee
是main
函数的 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[]);
第二次不要使用数组,因为使用预定义变量命名代码是违反标准的