2017-08-10 17 views
0

class.Hereの私が持っているもの:入力メンバ関数内のget()を使用する方法を私は日付の入力メンバ関数を実装しようとしてきた

class Date { 
    int year_; 
    int mon_; 
    int day_; 
    int readErrorCode_; 
    int value()const; 
    void errCode(int errrorCode); 

    public: 
     std::istream& read(std::istream& istr); 
     std::ostream& write(std::ostream& ostr)const; 
} 


std::istream& Date::read(std::istream& istr) { 
    istr.get(year_,5); 
    return istr; 
} 

私は入力から4つの文字を抽出したいと私のDateクラスのパラメータyear_に保存しますが、istr.getのエラーが発生しました。なぜ、cin.getが機能している間にistr.getが機能しないのだろうと思います。

オーバーロードされた関数のインスタンスがありません "std :: basic_istream :: get [_Elem = char、_traits]"は引数リストと一致します引数の型は(int、int) オブジェクト型はstd :: istream

+0

私たちは、エラーが何であるかについてランダムに推測するつもりはありません。あなたの 'Date'クラスの詳細と一緒に(あなたの質問に)(https://stackoverflow.com/posts/45604173/edit)入れてください。 ['std :: istream :: get'](http://en.cppreference.com/w/cpp/io/basic_istream/get)は、複数の入力フォームをサポートしているので、何をしようとしているのか、それを試してみる*は*かなり重要です。最後に、この関数は未定義の動作を呼び出します。それは 'std :: istream&'を返しますが、実際には何も返しません。 – WhozCraig

+0

ありがとうございます。エラーはクリアです。引数として 'int'とsizeをとる[' std :: istream :: get'](http://en.cppreference.com/w/cpp/io/basic_istream/get)はありません。これが 'std :: cin.get'で動作するならば、同じ提供物(と同じ制限事項)があるので、どのように表示されるのかを知りました。 'istr >> date'がほしいと思うのですが、これはちょうど投機的なことです。なぜなら、バイナリのraw-readまたはformatted-readが望ましく、意図されているかどうかは明らかではないからです。 – WhozCraig

+0

ありがとうございます。私の目標は、YYYY/MM/DDの形式で入力から数値を抽出し、year_mon_とday_にそれぞれ数値を保存することです。上記のistreamメンバー関数を使用してこれをどのように達成できますか? –

答えて

0

あなたがget機能を使用して喜んでいる場合は、

char c; while (is.get(c)) //concatenate into string if not/delim;

のようにcharで文字を読むことができます。また、私はについて多くを知らないistream& get (streambuf& sb, char delim);方法があります。

ただし、最も簡単な方法はistreamstd::stringに変換し、次にsubstringの方法をstd::stringとします。 How to read entire stream into a std::string?に例があります。

関連する問題