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;
}
첫 번째 오류는 완료되었지만 해결했을 때 사라졌습니다. Geeze 나는 바보 같았다. 나는 addressof 연산자를 잊었다 .... 내 실수를 바로 잡을 시간을내어 주셔서 감사합니다. – Ethan
문제 없어요. 행복한 코딩! –