2016-04-23 119 views
1

File類fstream的訪問爲私有成員

class File 
{ 
private: 
    fstream dataFile; 

public: 
    File(); 
}; 

File::File() 
{ 
    dataFile.open("Morse.bin", ios::in | ios::binary); 
    if(dataFile.fail()) 
     cout << "File could not be opened.\n"; 
    else 
     cout << "File opened successfully!\n"; 
} 

解碼器類

class Decoder: public File 
{ 
private: 
    char line; 

public: 
    void getLine(); 
}; 

void Decoder::getLine() 
{ 
    while(dataFile.get(line)) 
    { 
     cout << line; 
    } 
} 

2個問題:

  1. 是否dataFile包含Morse.bin conten TS? file opened successfully消息顯示,但我只是想確認。

  2. 我想從Decoder類中按字符讀取一個字符。我遇到的問題是從Decoder類訪問dataFile。我試圖爲dataFile創建一個存取函數,但它不允許我訪問它。錯誤消息是File::dataFile is inaccessible。這是有道理的,因爲它是私人的。但是,如果我無法創建將返回dataFile的訪問函數,那麼如何獲取dataFile以便操縱它?

+0

您可以添加** **數據文件在受保護的,或者你可以定義'Decoder'爲**友元類**,你有第二個選擇,但它太傻正常**不推薦** – Pavan

回答

0
  1. 還沒有。你還沒有讀過它。
  2. 使dataFile受保護,或從File提供訪問者。

    class File 
    { 
    protected: 
        fstream dataFile; 
    
    public: 
        File(); 
    }; 
    
    File::File() 
    { 
        dataFile.open("Morse.bin", ios::in | ios::binary); 
        if(dataFile.fail()) 
         cout << "File could not be opened.\n"; 
        else 
         cout << "File opened successfully!\n"; 
    } 
    
+0

'fstream getDataFile(){return dataFile;}'給我一個'dataFile'無法訪問的錯誤。 – Bryan

+0

@Bryan你在'Decoder'類中添加了那個嗎?如果是這樣,你需要把它放在'File'類中。私人成員只能在宣稱的班級中進行訪問。甚至沒有繼承類可以訪問它。 –

+0

我將它添加到文件的公共部分 – Bryan