2012-08-07 10 views
1

안녕하세요 저는 C++에서 ArrayList의 일반 구현을 만들고 있으며 일부는 MergeSort를 구현하고 있지만 이제는 테스트를 시작했습니다. 이상한 문제가 있습니다. 내 테스트에서 나는 간단하게하기 위해 int 형을 사용하고, 아래의 두 번째 함수 서명에 나는 오류 받고 있어요 :템플릿을 사용할 때 C++ 포인터의 오류가 발생했습니다.

:이 오류가 두 번째 함수의 재귀 호출에 그런

initializing argument 1 of 'T* ArrayList<T>::mergeSort(T*, int) [with T = int]' [-fpermissive] 

invalid conversion from 'int' to 'int*' [-fpermissive] 

왜 내가 int에서 int로 변환하려고 생각하고 있는지 이해할 수 없습니다 ... int * 유형이 아니어야합니다! 나는 C++에 대한 멍청이 다. 특히 C++의 제네릭 (비록 내가 자바에 능숙하지만)이 도움이 될만한 포인터 (말도 안되는 말)가 인정된다.

/** 
* Runs merge sort on this ArrayList<T>. Interface function to the central, 
* recursive, merge sort function. 
*/ 
template<class T> 
void ArrayList<T>::mergeSort() { 

    mergeSort(array, size); 
} 

/** 
* Runs merge sort on the passed in array. Recursive. 
* 
* @param array the array to sort. 
* @param arraySize the size of the array that is to be sorted. 
* @return the sorted array. 
*/ 
template<class T> 
T* ArrayList<T>::mergeSort(T* array, int arraySize) { 

    T* returnArray = array; 

    //If the arraySize isn't 1, recurse. Otherwise return the single element array. 
    if (arraySize != 1) { 

     returnArray = new T[arraySize]; 

     //Split arrays further. Recurse. 
     returnArray = mergeSort(array[0], arraySize/2); 
     returnArray += arraySize/2; 
     returnArray = mergeSort(array[arraySize/2], arraySize - (arraySize/2)); 
    } 

    return returnArray; 
} 

답변

3

두 번의 재귀 호출에서 포인터를 전달하지 않고 배열의 값을 해당 인덱스로 전달합니다.

if (arraySize != 1) { 

     returnArray = new T[arraySize]; 

     //Split arrays further. Recurse. 
     returnArray = mergeSort(array[0], arraySize/2); 
     returnArray += arraySize/2; 
     returnArray = mergeSort(array[arraySize/2], arraySize - (arraySize/2)); 
    } 
중 하나에 재귀 호출을 변경

:

returnArray = mergeSort(&array[0], arraySize/2); 
returnArray = mergeSort(&array[arraySize/2], arraySize - (arraySize/2)); 

나 :

returnArray = mergeSort(array, arraySize/2); 
returnArray = mergeSort(array + (arraySize/2), arraySize - (arraySize/2)); 

나는 당신의 첫 번째 오류가 무엇인지에 대한 명확한 아니에요, 당신이 차단 한 것 같습니다 오류 메시지의 일부

+0

첫 번째 오류는 완료되었지만 해결했을 때 사라졌습니다. Geeze 나는 바보 같았다. 나는 addressof 연산자를 잊었다 .... 내 실수를 바로 잡을 시간을내어 주셔서 감사합니다. – Ethan

+0

문제 없어요. 행복한 코딩! –

관련 문제