2009-09-16 14 views
-1

私は有名なschaumsの概要のC++プログラミングの本で勉強していました。リストの初期化と呼ばれるものがありました。Schaumのコードが機能しません!

私はこの本に基づいてコードを作成しましたが、コンパイルエラーが多く発生しました。私は問題がどこにあるのか自分に尋ねていたので、本のコードをコピーして、何がうまくいかなかったのかを推測しました!ここで

はコードです:

class Rational { 
     public: 
       Rational(int n=0, int d=1) : num(n), den(d) { } 
       int numerator0 const { return num; } 
       int denominator0 const { return den; } 

     private: 
       int num, den; 

}; 

main() 
{ 
     Rational x(22, 7); 
     cout << x.numerator() << "/" << x.denominator() << endl; 

} 

あなたがここに間違っているものを私に伝えることができますか?前もって感謝します。 P.P. "プロ" によって書かれた右ええ...

+0

"それはうまくいかなかった"ということについて具体的に言えますか?何が起こるのですか? – cjm

+1

コードが壊れています - メソッド宣言では(および)の代わりに0(ゼロ)があります。 –

+3

なぜコードをファイルに貼り付け、コンパイルしてどのようなエラーが発生するのかを確認してください。最初の1〜2つをあなたの質問に貼り付けてみませんか? – sbi

答えて

0

私はこの本を知らないが、少なくとも:

main() 

はなるはずです:

また
int main() 

// now the same as `Rational` methods. 
cout << x.numerator0() << "/" << x.denominator0() << endl; 
9
  int numerator0 const { return num; } 
      int denominator0 const { return den; } 

カッコ()の代わりに '0'(ゼロ)のカルトを確認してください。タイプミスが本や、あなたの貼り付けコードである場合

  int numerator() const { return num; } 
      int denominator() const { return den; } 
+10

OCRが失敗したように見えます:) –

+3

実際の本を買う理由がもう1つあります。> – arul

+0

誰かがエディタを起動したり、著者に実際のワープロを与えたりします。 –

3

ここ

int numerator0 const { return num; } 

タイプミスのように見える

int numerator() const { return num; } 

する必要がありますが知ってはいけません。

ああ、それはあなたが欠落している「初期化リスト」ではない「リストの初期化」

+0

それは本です - アドビはうまくいくものをすべて表示していません... – gujo

6
  1. と呼ばれていますが
  2. 分子と分母の署名が

この作品は有効ではありません入出力ストリームとusingディレクティブが含まれますOK:

#include <iostream> 
using std::cout; 
using std::endl; 
class Rational { 
    public: 
      Rational(int n=0, int d=1) : num(n), den(d) { } 
      int numerator() const { return num; } 
      int denominator() const { return den; } 

    private: 
      int num, den; 

}; 

main() 
{ 
    Rational x(22, 7); 
    cout << x.numerator() << "/" << x.denominator() << endl; 

} 
+3

'int main()'を意味しませんか? – rlbond

2

ここは優れたバージョンです。アップ()0とあなたの混乱は、これはあなたがそれが何を意味するのかさえも最も基本的な知識がなくても、コードを入力した意味

#include <iostream> 
using std::cout; 
using std::endl; 
// I'm assuming your code has the #include's and using's and you just 
// omitted them. 

class Rational { 
    public: 
     Rational(int n=0, int d=1) : num(n), den(d) { } 
     // "num(n), den(d)" is an initialization list; I think that's what 
     // Schaum's is talking about here. 

     int numerator() const { return num; } 
     int denominator() const { return den; } 
     // numerator and denominator are methods, so they need parenthesis 
     // like any other function call. 0 on the end must have been a typo. 

    private: 
     int num, den; 
     // This is okay, but many style guides recommend naming your member 
     // variables differently to set them apart from other variables. 
     // For example: 
     // int mNum, mDen; 
     // int num_, den_; 
}; 

// main needs a return type. For the sake of completness, I usually include 
// the argc and argv parameters as well. C++ lets you omit a parameter's 
// name if that parameter isn't used; this silences "unused parameter" 
// warnings in your compiler. 
int main(int, char**) 
{ 
    Rational x(22, 7); 
    cout << x.numerator() << "/" << x.denominator() << endl; 
    return 0; // You really ought to have a return value. 
} 
+0

main()には明示的なreturn文は必要ありません。放置すると0が返されます。 – Lucas

+0

私はそれを認識しませんでした。私のC日からの習慣でなければならない。ありがとう。 –

+0

intを返さないとコンパイラの中には不平を言うものがあります。移植性のために、リターンを含めるといいですね。 – patros

4

。 (コードがこのような本の中にあったとしても、それは当てはまります)。

coutendl(実際にはstd::coutstd::endlではなく)本書では注意を払っていませんか?そして、それらの2つの識別子に必要なインクルードディレクティブを提供することは本当に失敗しますか?戻り値のタイプ(int main())のないmain()関数を実際に定義していますか?

これらの質問に対する回答が「はい」の場合は、捨ててください。はい、私は非常に深刻です。それが本当に有名であっても(私は、C++に興味を持っているので、それについて聞いたことはありません)これが間違っている場合は、それは有名なくそだよ。

this answer私はちょうど良いC++の本をいくつかリストアップしました。

+0

本の最初の例では、これらのことを説明し、すべての例の一部であると仮定しています。私が見ることのできるところから、すべての例でmain()がmain()として宣言されています。彼らが歩く前に走ろうとしている人のように見えます。 – patros

+0

@patros:そうだね。だからエラーは本の中ではなく、本の前にある。 ':)' – sbi

関連する問題