2017-08-12 9 views
0

これは、エラーがどこにあるかコンパイラが示すファイルです。私は同じエラーをオンラインで検索しましたが、そのほとんどは< fstream>を含まないことが原因ですが、ここにはこのエラーが表示されています。変数std :: fstreamファイルに初期化子がありますが、型が不完全です。コンパイルエラー

Visual Studioで問題なくコンパイルされたものはすべて忘れていましたが、スクールマトリックスにアップロードしたときにコンパイルエラーが表示され、メッセージは "変数std :: fstreamファイルに初期化子がありますが、 。

#include <iostream> 
#include <fstream> 
#include "MyFile.h" 
using namespace std; 
using namespace sict; 
int main() { 
    fstream file("ms3.txt", ios::out); 
    file << "one" << endl << "two" << endl; 
    file.close(); 
    MyFile F("ms3.txt"); 
    F.load(file); 
    cout << "Linear: " << F << endl; 
    cout << "As is: " << endl; 
    F.print(); 
    cout << "Enter the following: " << endl << "three<ENTER>" << endl <<  "four<ENTER>" << endl << "Ctrl-Z<ENTER>" << endl << endl; 
    cin >> F; 
    F.store(file, true); 
    F.load(file); 
    cout << F << endl; 
    F.print(); 
    return 0; 
} 

これは私のMYFILE.Hあり、そしてmyfile.cppの

#ifndef SICT_MYFILE_H__ 
#define SICT_MYFILE_H__ 
#include "Streamable.h" 
#include "Streamable.h" 
#include "Streamable.h" // Streamable.h is included three times on purpose. 
namespace sict { 
    class MyFile : public Streamable { 
     char fname_[256]; 
     char text_[10000]; 
    public: 
     MyFile(const char* fname); 
     std::fstream& store(std::fstream& file, bool addNewLine)const; 
     std::fstream& load(std::fstream& file); 
     std::ostream& write(std::ostream& os, bool linear)const; 
     std::istream& read(std::istream& is); 
     void print(); 
    }; 
    std::ostream& operator<<(std::ostream& ostr, const MyFile& mf); 
    std::istream& operator >> (std::istream& istr, MyFile& mf); 
} 
#endif 

myfile.cppの

#define _CRT_SECURE_NO_WARNINGS 
#include <iostream> 
#include <fstream> 
#include <cstring> 
#include "MyFile.h" 
using namespace std; 
namespace sict { 

    MyFile::MyFile(const char* fname) { 
     text_[0] = char(0); 
     strcpy(fname_, fname); 
    } 
    fstream& MyFile::store(std::fstream& file, bool addNewLine)const { 
     file.open(fname_, ios::app | ios::out); 
     int i = 0; 
     while (text_[i]) { 
      file << text_[i]; 
      i++; 
     } 
     file.close(); 
     return file; 
    } 
    fstream& MyFile::load(std::fstream& file) { 
     file.open(fname_, ios::in); 
     int i = 0; 
     while (!file.fail()) { 
      text_[i++] = file.get(); 
     } 
     file.clear(); 
     file.close(); 
     if (i > 0) i--; 
     text_[i] = 0; 
     return file; 
    } 
    ostream& MyFile::write(std::ostream& os, bool linear)const { 
     for (int i = 0; text_[i]; i++) { 
      if (linear && text_[i] == '\n') { 
       os << " "; 
      } 
      else { 
       os << text_[i]; 
      } 
     } 
     return os; 
    } 
    istream& MyFile::read(std::istream& is) { 
     is.getline(text_, 9999, EOF); 
     return is; 
    } 
    void MyFile::print() { 
     write(cout, false); 
     cout << endl; 
    } 
    std::ostream& operator<<(std::ostream& ostr, const MyFile& mf) { 
     return mf.write(ostr, true); 
    } 
    std::istream& operator >> (std::istream& istr, MyFile& mf) { 
     return mf.read(istr); 
    } 
} 

MYFILE.Hとmyfile.cppのは、与えられたので、私はありませんでした。何かを編集すると仮定して、私はStreamable.hの4つの純粋仮想関数用のインターフェースも追加しました。

#ifndef SICT_STREAMABLE_H__ 
#define SICT_STREAMABLE_H__ 

namespace sict { 
    class Streamable { 
    public: 
     virtual std::fstream& store(std::fstream& file, bool addNewLine)const = 0; 
     virtual std::fstream& load(std::fstream& file) = 0; 
     virtual std::ostream& write(std::ostream& os, bool linear)const = 0; 
     virtual std::istream& read(std::istream& is) = 0; 
    }; 
} 

#endif 
+1

。また、このエラーはおそらく "MyFile.h"と関係がありますので、ここにも投稿してください。 – VTT

+0

私たちは、2つの 'using namespace'がいくつかの矛盾した名前を持っているとしか推測できません。 –

+1

[mcve]を提供する方法をお読みください! – chtz

答えて

0

これは全く意味をなさない:あなたはとにかく#ifndef SICT_STREAMABLE_H__で複数の介在物を防ぐよう#include "Streamable.h" // Streamable.h is included three times on purpose.は実際には、廃棄物のコンパイル時間を除いて何もしません。

また、一致するヘッダーファイルは最初に(適用時にプリコンパイル済みヘッダーファイルの後にのみ)を含めることをお勧めします。そうすれば、MyFile.hのようなヘッダーには、任意のソースファイル用にコンパイルするのに必要なインクルードが含まれていることがわかります(奇妙なことをしない限り)。

したがってMyFile.cppで始まる必要があります:あなたがここに完全なエラーの説明を投稿する必要があり

#include "MyFile.h" 
関連する問題