2011-04-30 9 views
0

私はコードのこの部分について助けが必要...私はschmooに2つの倍を渡すことになっています。もし私がこれを好きなら、 "Schmoo(8.0,9.0);"それは私がそれを持っているようにそれを試してみると、私はエラーが発生します。私はこのように見えるcinからの入力を読み込むことになっています。「schmoo 8.0 7.0を追加」私はダブルスを間違って抽出していると思います。彼らが入力されている限り、これを続ける必要があります。C++ stdinからstdoutへの読み込みを支援します。また、演算子のオーバーロード

while(cin){ 
    string command1 = "add schmoo"; 
    string input; 
    cin >> input; 
    double a,b; 
    if(input == command1){ 
     cin >> a >> b; 
     Schmoo *a = new Schmoo(a,b); 
     c.insertFront(a); 
    } 
    string command2 = "throw mud"; 

    if(input == command2){ 
     cin >> a >> b; 
     c.throwMudAt(a,b); 
    } 

また、私はこのopperatorの過負荷を助けが必要:

ostream &operator<<(ostream &os, Schmoo &s){ 
    if(s.getMud() == 1){ 
    os << "Schmoo at (" << s.x << ", " << s.y << ") was hit mud " << mud << "time."; 
    } 
    os << "Schmoo at (" << s.x << ", " << s.y << ") was hit with mud" << mud << "times."; 
    return os; 
} 

I)はs.getMud(としなければならないエラーを取得しています。以前はポインタを使って泥を取得していましたが、このクラスはポインタを持つものと友人ではありません。しかし、getMudは、これが同じクラスの関数です。どのようにgetMud()を使用しますか?この文脈では、

+2

コードを正しく表示するには、4つ分のスペースをインデントするか、コードを選択してテキストボックスの上の '{}'ボタンを押します。 – Xeo

+0

あなたのコードに問題があります: 'double a、b;シン>> a >> b; Schmoo * a = new Schmoo(a、b); ' – MFH

答えて

1

cinは、最初の空白が検出されるまで読み取ります。したがって、input文字列は、「add schmoo」ではなく「add」になります。最初の文字列を読み込み、 "追加"されているかどうかを確認してから、次の文字列を読み込んでください(それ以上の文字列を読み込みたい場合はdoubleを読んでください)。または、コマンドを「add_schmoo」に変更します。あなたの過負荷のために


、どのクラスSchmooが定義されていますか?あなたの問題は、このラインから主に来ている

0

:あなたの入力がadd schmoo 8.0 9.0ある場合

string input; 
cin >> input; 

、その後cin >> inputは、あなたがそれをそれは文字を読むのを止めなければならないときのないソリッド表示を与えられていないとして、機能しません。

+1

' cin'は最初のスペースまで読み込みます。したがって、 'input'は" add "だけを含みます。 – Xeo

+0

私は個人的に文字列で 'cin'を使うことはないので、わかりませんでした。私は通常getline()を代わりに使用します。 – riwalk

+0

汚れの識別は何ですか? cin >> input >> input1; – adsderek

関連する問題