为什么我的 fstream 访问不能编译?

Why doesnt my fstream access compile?

我有问题。我正在用 C++ 编写程序,我想访问一些文件,所以我使用 class fstream。好吧,这里一切正常,但是当我要编译程序时它崩溃并给我一个错误。

我把连接文件的代码放在这里:

#include <iostream>
#include <fstream>
#include <map>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <string.h>

using namespace std;

fstream file1, file2;

void access();

int main(){
   access();

   file1.close();
   file2.close();
}

void access(){

    file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
    cout << "Opening File1..." << endl;

    file2("C:\data\file2.dat",ios::in | ios::out | ios::binary);
    cout << "Opening File2..." << endl;

}

它给了我以下错误:

no match for call to '(std::fstream {aka std::basic_fstream<char>}) (const char [20], std::_Ios_Openmode)'

所以我尝试这样访问方法:

void access(){
        string f1 = "C:\data\file1.dat";
        string f2 = "C:\data\file2.dat";


        file1(f1.c_str(),ios::in | ios::out | ios::binary);
        cout << "Opening File1..." << endl;

        file2(f2.c_str(),ios::in | ios::out | ios::binary);
        cout << "Opening File2..." << endl;

    }

但它也给我一个错误。其内容如下:

no match for call to '(std::fstream {aka std::basic_fstream<char>}) (const char*, std::_Ios_Openmode)'

我不知道会发生什么,如有任何帮助,我们将不胜感激。

非常感谢。

尽管看起来像,但这不是对构造函数的调用,因为它已经在全局 space.

中声明和构造

file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);

这是对 operator() 的调用。尝试使用 open 代替:

file1.open("C:\data\file1.dat",ios::in | ios::out | ios::binary);

您的问题确实说明了为什么两个 std::fstream 变量应该是全局变量。所以你可以让它们成为 access.

中的局部变量

这是一个例子;请注意,我没有改动程序的其余部分,尽管它包含一些其他奇怪的东西(例如,包括很多你从未使用过的 headers):

#include <iostream>
#include <fstream>
#include <map>
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
#include <string.h>

using namespace std;

void access();

int main(){
   access();
}

void access(){

    fstream file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);
    cout << "Opening File1..." << endl;

    fstream file2("C:\data\file2.dat",ios::in | ios::out | ios::binary);
    cout << "Opening File2..." << endl;

}

此语法无效:

file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);

要么使用这些参数构造流以进行初始化:

fstream file1("C:\data\file1.dat",ios::in | ios::out | ios::binary);

或者您打开一个已经构建好的流:

file1.open ("C:\data\file1.dat",ios::in | ios::out | ios::binary);

由于 file1 已经在 access() 之外定义,第二个选项在这里似乎最合适。