有人可以向我解释为什么这段代码在 Eclipse CDT 中不起作用吗?当我运行该程序时,输出为“310598136”。我还在第 7 行收到一个错误,上面写着“‘成员 x(和 y)未在此构造函数中初始化”,但我不知道为什么当我在构造函数中有变量并在私有(private)内存中分配内存时它们没有初始化类的一部分。有人可以告诉我我做错了什么吗?
#include <iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(int a, int b)
{
a = x;
b = y;
}
int getArea();
private:
int x;
int y;
};
int Rectangle::getArea()
{
return x * y;
}
int main()
{
Rectangle bob(2,3);
cout << bob.getArea();
return 0;
}
最佳答案
您已经在构造函数中交换了变量的顺序。
改成
Rectangle(int a, int b) : x(a), y(b) {}
或者,更好
Rectangle(int x, int y) : x(x), y(y) {}
C++ 足够聪明,您可以在参数列表中使用与成员变量相同的名称,当您只是复制值时,您不妨这样做——它非常清楚地传达了该参数的用途.
永远记住按照在类中声明它们的顺序初始化成员变量。
关于c++ - 使用 Eclipse CDT 在构造函数中未初始化的输出不正确和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624013/