2015-03-08 42 views
2

我有一个问题。我正在用C++编写程序,我想访问一些文件,所以我使用fstream类。那么,这里都可以,但是当我编译程序时,它会崩溃并给我一个错误。为什么我的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)' 

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

非常感谢。

回答

4

即使它看起来像它,但这不是对构造函数的调用,因为它已经在全局空间中声明和构造。

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

1

你的问题没有说明为什么这两个变量std::fstream应该是全球性的。所以你可以在access中使它们成为局部变量。

这里是一个例子;请注意,我已经离开了程序不变的其余部分,虽然它包含了一些其他奇怪的事情(例如,包括大量的头,你从来不使用):

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

} 
1

这句法无效:

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

要么你consutruct使用这些参数为inistialisation流:

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()以外,所以第二个选项在这里似乎最合适。