2014-09-19 4 views
1

기본적으로 배열의 크기를 변경하려면 복제본을 원합니다. 다음 함수는 배열에서 다음 사용 가능한 위치를 검색한다고 가정합니다. 한 번 다음에 10을 치면 최대 용량입니다. 중복 전화를 걸고 싶습니다. 다음 함수 내에서 배열이 가득 찬 것으로 판명되면 기본적으로 duplicate를 호출하십시오.이 void 함수를 다른 함수에서 어떻게 호출합니까?

문제는 루프를 10 개의 숫자로 가져올 때 11 번째에 실패합니다. 10 번째 요소가 들어가면, 그것은 duplicate 함수로 간 다음 포인터로 간 다음 배열을 통과하고 루핑을 계속합니다. 따라서 함수를 사용하여 총 요소 수를 볼 때 여전히 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; 
} 
+0

'중복'에는 빠진 중괄호가있는 것 같습니다. – jxh

+0

당신은 무엇을 시도 했습니까, 왜 효과가 없었습니까? – jxh

+0

int를 만들려고했는데, 그 전에 f를 쓰고 싶었지만 입력이 필요하고 main에 있어야한다고 생각했습니다. 그럼 (가방, 크기)했지만 가방 너무 포인터가 작동하지 않을 것입니다. –

답변

0

귀하의 Duplicate() 함수를 호출하는 것을 시도하고 그것이 원래의 요소를 복사 완료 후 maxsize를 업데이트하는 데 실패합니다. 반환하기 전에 새 bag에 할당 된 내용으로 maxsize을 업데이트해야합니다.

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

와우 그게 그것이 완벽 지금 작동 감사합니다 : O –

+0

당신은 대단히 환영합니다. @ 토니는 처음에 그것을 보았습니다. – jxh

+0

@TonyD 고맙습니다. –

관련 문제