我正在着名的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;
}
你能告诉我这里有什么问题吗?先感谢您。 附:由“专业人士”写的是对的......
答案 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)
这样可行:
#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
时,这意味着您输入的代码甚至没有最基本的知识。 (即使代码在书中也是如此,这也是正确的。)这意味着你理解得太少,已经没有进展到那么远。
这本书真的使用cout
和endl
(而非std::cout
和std::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;