2015-03-08 18 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()以外,所以第二個選項在這裏似乎最合適。