【问题标题】:How do I call this void function from another function?如何从另一个函数调用这个 void 函数?
【发布时间】:2014-11-13 13:10:18
【问题描述】:

基本上我想要复制来调整我的数组大小。函数 next 假设在数组中搜索下一个可用位置。一旦下一个达到 10,这是我希望它调用重复的最大容量。如果在下一个函数中发现数组已满,则基本上调用重复。

问题是,当我将循环设为 10 个数字时,它会在 11 日失败。在第 10 个元素进入后,它进入复制函数,然后进入指针,然后通过数组,然后它一直在循环,所以当我使用我的函数查看元素总数时,它仍然显示 10 ,这意味着maxsize 没有改变。我不明白为什么?

void ProgramOne<Type>::Next(Type & y)
{
    if (!IsFull())
    {
        if (count < maxsize)
        {
            bag[count] = y;
            count++;
        }
    }
    else
    {
        Duplicate();
    }
}

我正在尝试调用它

void ProgramOne<Type>::Duplicate()
{
        int *bagB = new int[maxsize * 2];
        for (int i = 0; i < maxsize; i++)
        {
            bagB[i] = bag[i];
        }
        delete[] bag;
        bag = bagB;
}

【问题讨论】:

  • Duplicate 中似乎缺少一些大括号。
  • 你尝试了什么,为什么没有成功?
  • 我尝试在它之前制作一个 int 让我们说 f,g 但后来我认为这需要输入并且必须在 main 中。然后我尝试了 (bag,size) 但 bag 是一个指针,所以它也不起作用。
  • @jxh 抱歉忘了给你加标签。我尝试了很多东西,但不管它给了我未声明的标识符错误。
  • 在 jxh 的评论之后,您在 for 循环之后用大括号围绕三个语句进行了编辑,但您应该只执行循环内的第一个赋值语句。 delete[] bag;bag = bagB; 只能在复制后进行。更一般地说,代码是一团糟:你不应该有一个“重复”成员函数,它甚至不使用任何成员变量并且不返回新的 maxsize... 原样,你必须复制 @ 987654329@ Duplicate 之外的知识,并希望他们在程序维护/发展期间保持同步。您没有使用std::vector 有什么原因吗?

标签: c++ arrays function void-pointers dynamic-allocation


【解决方案1】:

您的Duplicate() 函数在复制原始元素后无法更新maxsize。在它返回之前,它应该将maxsize 更新为它为新的bag 分配的内容。

        delete[] bag;
        bag = bagB;
        maxsize *= 2;

【讨论】:

  • 不客气。不过,@TonyD 首先是我从 cmets 中看到的。
猜你喜欢
  • 2022-10-04
  • 1970-01-01
  • 2023-01-28
  • 2015-07-03
  • 2020-11-17
  • 2021-07-03
  • 1970-01-01
  • 2019-02-17
  • 2013-05-21
相关资源
最近更新 更多