创建一个打开文件的函数并使用ifstream和ofstream读取它,但是其QT表示我没有声明该函数

问题描述

试图创建一个使用ifstream和offstream打开文件函数,但是QT编译器告诉我未声明我的变量。程序要长得多,但是它的这个特定部分会导致错误

我需要使函数能够在主代码中接收声明的变量,以便以后可以打开文件。 不能使用全局变量。 我可以在不使用函数的情况下运行程序,但这是必须的。

/home/eip/Desktop/atm/ATMFINAL/main.cpp:18:错误:变量或字段“ OpenUserFile”声明为空

/home/eip/Desktop/atm/ATMFINAL/main.cpp:18:错误:在此范围内未声明“ load”

/home/eip/Desktop/atm/ATMFINAL/main.cpp:18:错误:“,”令牌之前的预期主表达式 无效的OpenUserFile(load&,ReceiptCreator&,Save&) ^ /home/eip/Desktop/atm/ATMFINAL/main.cpp:18:错误:在此范围内未声明“ ReceiptCreator” 无效的OpenUserFile(load&,ReceiptCreator&,Save&) ^ /////////
/home/eip/Desktop/atm/ATMFINAL/main.cpp:18:错误:“,”令牌之前的预期主表达式 无效的OpenUserFile(load&,ReceiptCreator&,Save&) ^ ///////////// /home/eip/Desktop/atm/ATMFINAL/main.cpp:18:错误:在此范围内未声明“保存” 无效的OpenUserFile(load&,ReceiptCreator&,Save&) ^ ///////// /home/eip/Desktop/atm/ATMFINAL/main.cpp:18:错误:')'标记之前的预期主表达式 无效的OpenUserFile(load&,ReceiptCreator&,Save&) ^

  #include<iostream>
  #include<iomanip>
  #include<fstream>
  #include<cstdlib>
  #include<ctime>
  using namespace std;






      void OpenUserFile(load&,ReceiptCreator&,Save&){

      load.open("id.txt"); // reads id.txt.


       if(load.fail()){ //If file has problems,user receives an error message
        cout<< "Error reading user id" <<endl;
      }

      ofstream& ReceiptCreator,Save; // instruction to create a file.

      ReceiptCreator.open("receipt.txt",ios::app); //prints out output to external .txt file.

      if(ReceiptCreator.fail()){ //if error reading display,error message
      cout<< "Error printing transaction receipt" <<endl;
      }
      }
     int main(){

     time_t C = time(0); // uses computers curren time
     string CT = ctime(&C);// shows user current time



    string account,userName,SocialSec,PassNum,UserBalance,Bankname,FirstName;
    string LastName,AccountNum,SocialNum;//


    int PassFile,PassUser,WithDrawal; // variables for user password
    double InitialBalance,Deposit,CurrentBalance;// variables for aritmethic calculations
    unsigned ATMNUM = 100+rand()%500; // randomizes atm number
    int receipt,process,UI = -99,retry = 1; //
    ofstream ReceiptCreator,Save;
    ifstream load; // starts process to read user information.
    int OpenUserFile(load&,Save&);

    cout << "Loading data from file..." << endl;

解决方法

void foo(int x){}是一个具有类型int的参数的函数。

void foo(int){}是具有一个类型为int的未命名参数的函数。

void OpenUserFile(load&,ReceiptCreator&,Save&){}是具有类型load&ReceiptCreateor&Save&的未命名参数的函数。但是,这些不是您的代码中的类型。我会留给您找出正确的签名。

您必须一个个地修复错误,因为一个错误会混淆编译器并触发其他错误。我现在可以发现的另一个问题是

ofstream& ReceiptCreator,Save;

参考不能被初始化。我想这行仅仅是修复代码的尝试,因为名称是参数的名称,所以您可以删除该行。如果不是,则需要确定是将流作为参数传递,还是仅将其包含在函数中,而不能同时包含在函数中。