Schaum的代码不起作用!

时间:2009-09-16 16:12:21

标签: c++

我正在着名的schaums大纲c ++编程书中学习,我看到了一个叫做列表初始化的东西 - 我之前不知道。

我根据这本书制作了一个代码,但它引发了很多编译器错误。我问自己的问题在哪里,所以我复制了书中的代码,猜猜是什么 - 它不起作用!

以下是代码:

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;

}

你能告诉我这里有什么问题吗?先感谢您。 附:由“专业人士”写的是对的......

6 个答案:

答案 0 :(得分:9)

            int numerator0 const { return num; }
            int denominator0 const { return den; }

注意'0'(零)字符而不是括号()。

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

答案 1 :(得分:6)

  1. 您缺少包括iostreams和使用指令
  2. 分子和分母签名无效
  3. 这样可行:

    #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;
    
    }
    

答案 2 :(得分:4)

当您使用()弄乱0时,这意味着您输入的代码甚至没有最基本的知识。 (即使代码在书中也是如此,这也是正确的。)这意味着你理解得太少,已经没有进展到那么远。

这本书真的使用coutendl(而非std::coutstd::endl),甚至没有关于它的说明吗?它真的无法为这两个标识符提供必要的include指令吗?它是否真的定义了main()函数而没有返回类型(int main())?

如果这些问题的答案为“是”,请将其丢弃。是的,我很认真。即使它真的很有名(我怀疑,因为我对C ++感兴趣,从未听说过它)。如果它弄错了,那么它最好是着名的垃圾。

this answer中,我刚刚列出了一些非常好的C ++书籍。

答案 3 :(得分:3)

在这里看起来像一个错字

int numerator0 const { return num; }

应该是

int numerator() const { return num; }

不知道书中是否有拼写错误或粘贴的代码。

哦,它被称为“初始化列表”而不是“列表初始化”

答案 4 :(得分:2)

这是一个更好的版本。

#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.
}

答案 5 :(得分:0)

我不懂这本书,但至少:

main()

应该成为:

int main()

此外,

 // now the same as `Rational` methods.
 cout << x.numerator0() << "/" << x.denominator0() << endl;