使用Eclipse CDT在构造函数中初始化的输出和变量不正确

时间:2018-04-03 06:56:55

标签: c++ eclipse class initialization eclipse-cdt

有人可以向我解释为什么这段代码在Eclipse CDT中不起作用?当我运行程序时,输出是" 310598136。"我也在第7行收到错误,说明"'成员x(和y)未在此构造函数中初始化"但是当我在类的私有部分中分配构造函数和内存中的变量时,我不知道它们为什么不初始化。有人可以告诉我我做错了吗?

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

1 个答案:

答案 0 :(得分:1)

您已在构造函数中交换了变量的顺序。

将其更改为

Rectangle(int a, int b) : x(a), y(b) {}

或者,更好

Rectangle(int x, int y) : x(x), y(y) {}

C ++足够聪明,您可以在参数列表中使用与成员变量相同的名称,当您只是复制值时,您也可以这样做 - 它非常清楚地传达了该参数是为了。

始终记住按照您在班级中声明的顺序初始化成员变量。