2016-06-18 9 views
-3

On outfile = fstream(filename);私にはprivate 'ios_base::operator=(const ios_base&)' is inaccessibleが表示されます、私はそれを解決する方法がわかりません、私はそれをコンパイルするために使用していますマック、それは私はこのラインがPCでエラーを表示する理由が混乱しているが、Macはそれを使用することができます

class ErrorHandler{ 
private: 

    std::fstream outfile; 

public: 
    ErrorHandler(char const filename[]) { 

     outfile = fstream(filename); 

     outfile << filename << " opened" << endl; 
    } 

    ~ErrorHandler(){ 

    } 

    void warn(char const message[]){ 

     cout << message << endl; 

     outfile << message << endl; 

    } 


    void terminate(char const message[]){ 

     cout << message << endl; 

     outfile << message << endl; 

     exit(1); 

    } 
}; 

int main() { 

    ErrorHandler h("log.txt"); 

    h.warn("Error 10: this is your first warning"); 
    h.warn("Error 20: I warned you"); 
    h.terminate("Error 30: Told you so."); 

    return 0; 
} 
+0

コードをコードとして適切にフォーマットします。これはボタンを1回クリックするだけです。 –

+0

少なくともC++ 11でPCでコンパイルしていますか? – LogicStuff

+0

この投稿への最後の編集では、メインの投稿から実際のエラーメッセージが削除され、コードに追加されました。 –

答えて

-1

あなたの問題上の問題はないが、あなたがそれを割り当てるときに起こっている正確に何である、別のfstreamを割り当てることができないということです。

あなたはいくつかのオプションをしましたが、最も簡単にはstd::fstream*としてoutfileを宣言した後、あなたのコンストラクタですることです:

outfile = new fstream(filename); 

は、あなたのデストラクタでそれを削除することを忘れないでください。

+1

実際には、動的割り当てやポインタの必要はありません。 – juanchopanza

+0

問題を解決していただきありがとうございますが、私の友人はMacと全く同じコードをコピーしています。エラーはありません.PC上でエラーが発生する理由はわかりません。私の教授によって与えられたこのコーディングは、彼が実行してもうまくいきます。 –

+0

@ user6482243これは有効なC++ではありません。あなたの友人がコンパイルする方法を想像することはできませんが、コードが違うかもしれません。 – juanchopanza

関連する問題

 関連する問題