Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从另一个函数调用这个void函数?_C++_Arrays_Function_Void Pointers_Dynamic Allocation - Fatal编程技术网

C++ 如何从另一个函数调用这个void函数?

C++ 如何从另一个函数调用这个void函数?,c++,arrays,function,void-pointers,dynamic-allocation,C++,Arrays,Function,Void Pointers,Dynamic Allocation,基本上,我想重复调整我的数组大小。假设函数next搜索数组中的下一个可用位置。一旦下一个点击10,这是最大容量,我希望它调用重复。如果在下一个函数中发现数组已满,则基本上调用duplicate 问题是,当我将循环设置为10个数字时,它在11号失败。在第10个元素进入后,它进入复制函数,然后指向指针,然后穿过数组,然后它一直循环,所以当我使用函数查看元素总数时,它仍然显示为10,这意味着maxsize没有改变。我不明白为什么 void ProgramOne<Type>::Next(Ty

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

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

void ProgramOne<Type>::Next(Type & y)
{
    if (!IsFull())
    {
        if (count < maxsize)
        {
            bag[count] = y;
            count++;
        }
    }
    else
    {
        Duplicate();
    }
}
void ProgramOne::Next(类型&y)
{
如果(!IsFull())
{
如果(计数<最大值)
{
行李[计数]=y;
计数++;
}
}
其他的
{
重复();
}
}
我想把这个叫做

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;
}
void ProgramOne::Duplicate()
{
int*bagB=新int[maxsize*2];
对于(int i=0;i
复制原始元素后,您的
Duplicate()
函数无法更新
maxsize
。在返回之前,它应该将
maxsize
更新为它为新
行李分配的内容

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

Duplicate
中似乎缺少一些大括号。您尝试了什么,为什么不起作用?我尝试在它之前生成一个int,比如f,g,但后来我认为这需要一个输入,并且必须在main中。然后我尝试了(袋子,大小),但袋子是一个指针,所以不起作用。@jxh抱歉,忘了标记你了。我尝试了很多方法,但不管怎样,它都会给我一个未声明的标识符错误。在jxh的注释之后,您在
for
循环后的三条语句周围用大括号进行了编辑,但是您应该只在循环内执行第一条赋值语句<代码>删除[]包
行李=行李袋只能在复制后执行。更一般地说,代码很混乱:您不应该有一个“复制”成员函数,它甚至不使用任何成员变量,也不返回新的
maxsize
。。。按原样,您必须复制
*2
以外的知识
复制
,并希望它们在程序维护/演化过程中保持同步。您不使用std::vector有什么原因吗?非常欢迎@不过,我从评论中看到TonyD首先发现了这一点。