1
//i have two errors in my code
#include <iostream>
#include<iomanip>
#include<fstream>
using namespace std;
struct PLAYER
{
  string first_name;
 string last_name;
};
void showFile(fstream&, PLAYER&); // line 13
int main()
{
    const int MAX=21;
    PLAYER array[MAX];
    ifstream inputFile;
    inputFile.open("PlayerNames.txt",ios::in);
    if(inputFile)
    {
        showFile(inputFile, array);  // line 22

    }else
        cout<<"\n\nError opening file";

    inputFile.close();
    return 0;
}
void showFile(fstream &file, PLAYER &array )
{
    int index=0;
    int p_num=1;
    string lname, fname;
    file>>lname>>fname;
    while(!file.eof())
    {

       // array[index].last_name=
       cout<<lname<<" "<<fname;
        //array[index].first_name=fname;
        //array[index].player_number=p_num;

        index++;
        p_num++;
        file>>lname>>fname;
    }
       // cout<<"\n"<<index;
        //cout<<lname<<" "<<fname;
}

这个程序终于起作用了,直到我把它放在函数中。我在这个程序第 22 行错误:无效初始化引用类型 std::fstream 第 13 行错误:在传递 void showFile(std:: fstream&, PLAYER&) 的参数 1 中有两个错误

4

2 回答 2

1

第 13 行的函数声明表明您正在传递 1 个PLAYER对象,而不是数组。如果您想保留数组,请在 StackOverflow 中搜索“[C++] 传递数组函数”。

我强烈建议使用std::vector它,因为它在传递给函数时语法更简单。

于 2013-05-12T18:54:21.063 回答
1

Anifstream不能转换为fstream,只能转换为istream

文档中您可以看到basic_ifstream是源自basic_istream,而不是basic_fstream.

让你的功能:

void showFile(istream&, PLAYER&);

这实际上在很多方面都更好。一方面它是正确的(c:但这也意味着您可以使用任何输入流来测试它,而不仅仅是文件流。它更松散耦合,并且编程到更抽象的接口。

于 2013-05-12T19:19:10.963 回答