for循环不能在C ++中执行

时间:2018-01-28 19:07:33

标签: c++ oop for-loop

我正在尝试使用随机代码来接受使用动态大小的值。令人惊讶的是,Accept函数中的for循环不会执行。相反,控件直接离开函数。请解释一下这里的错误是什么?

size

3 个答案:

答案 0 :(得分:3)

这里有一些问题。

  1. 你有一个与成员同名的类参数,这不是一个真正的问题,但却是一个混乱的来源(如你的情况)。
  2. 您永远不会将成员size设置为构造函数内的任何内容。
  3. 对于第一,我建议将类成员size重命名为size_或类似的东西,因为这会创建一个分离并使变量更容易相互区分。至于第二个问题,我会将你的构造函数改为:

    consequtive::consequtive(int size) : size_(size) // Assuming the member is called `size_`
    {
        ptr = new int[size];
    }
    

    代码应该现在可以使用,并使用名为member initializer lists的概念。未设置变量size会导致undefined behavior

答案 1 :(得分:1)

您忘记初始化size成员变量。

你可以这样做:

consequtive::consequtive(int size)
:   size(size),
    ptr(new int[size])
{
}

您还应该在类中添加析构函数,以避免内存泄漏:

consequtive::~consequtive()
{
    delete[] ptr;
}

答案 2 :(得分:0)

类定义中的size

public : int *ptr;
         int size;

构造函数实现中的size

consequtive::consequtive(int size)

以及size函数

中的main
int size = 0;

都是不同的变量。后两者由于它们的使用方式都具有相同的值,但是一个size可以更改为不同的值,而另一个不知道。提问者代码中的错误是因为第一个size从未给出值并且未初始化使用。

解决方案:

consequtive::consequtive(int size): ptr(new int [size]), size(size)
{
}

我们在这里使用Member Initializer List。在这种情况下,我们不会从它的使用中获得太多收益,但它是一个非常有用的工具。更多相关内容:Why should I prefer to use member initialization list?

使用与成员同名的参数或局部变量时要小心。最内部的标识符总是赢得内部

consequtive::consequtive(int size): ptr(new int [size]), size(size)
{
    // in here
}

size变量是参数而不是成员。您可以this->size明确声明您想要该成员,但最好不要重复使用该标识符。您可能忘记添加this->,编译器不太可能警告您错误。