2014-09-20 2494 views
-4

我試圖打開一個輸入和輸出文件通過傳遞給一個函數的指針引用,但每次我嘗試編譯該程序時出現錯誤:「左'.open'必須有一個類/結構/聯合有人可以幫忙看一下有什麼不對的代碼呢?左邊。必須有類/結構/聯合C++錯誤

#include <fstream> 
#include <iostream> 
#include <iomanip> 
#include <cstdlib> 
#include <cctype> 

using namespace std; 

void PrepareFiles(ifstream* fin, ofstream* fout); 

int main(){ 
    ifstream fin; 
    ofstream fout; 

    PrepareFiles(&fin, &fout); 

    fin.close(); 
    fout.close(); 
    return EXIT_SUCCESS; 
} 

void PrepareFiles(ifstream* fin, ofstream* fout) 
{ 
    char inputFilename[MAX_LENGTH_FN + 1], 
     outputFilename[MAX_LENGTH_FN + 1]; 

    cout << "Input filename (up to " << MAX_LENGTH_FN << " characters): "; 
    cin.get(inputFilename, MAX_LENGTH_FN + 1, '\n'); 
    cin.ignore(999, '\n'); 
    cout << "Output filename (up to " << MAX_LENGTH_FN << " characters): "; 
    cin.get(outputFilename, MAX_LENGTH_FN + 1, '\n'); 
    cin.ignore(999, '\n'); 

    *fin.open(inputFilename, ios::in); 
    if (*fin.fail()) 
    { 
     cerr << "Error opening input file " << inputFilename; 
     exit(EXIT_FAILURE); 
    } 

    *fout.open(outputFilename, ios::out); 
    if (*fout.fail()) 
    { 
     cerr << "Error opening output file " << outputFilename; 
     exit(EXIT_FAILURE); 
    } 
} 
+1

既可以做'(* fin).',或者甚至更具代表性,'fin->' – Cornstalks 2014-09-20 20:01:39

回答

1

.*更高的優先級,所以*fin.open(inputFilename, ios::in);(及其他)被解釋爲*(fin.open(inputFilename, ios::in));,這是不正確,因爲fin是一個指針

使用括號或更好,->甚至可以下注ter,通過引用傳遞參數,我看不到需要通過指針傳遞。

+0

哦,好的,謝謝!我明白你在說什麼。我必須關注所有單一的陳述,因爲它們都意味着不同的東西。就像這個,我需要一個括號,因爲我只用fin作爲指針,而不是整個語句。 – 2014-09-20 20:30:05

相關問題