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++中的泛型(儘管我對Java很熟練),所以有用的指針(沒有雙關語意思)是讚賞的!
/**
* 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我很笨,我忘了操作員的地址....感謝您抽出時間糾正我的錯誤。 – Ethan 2012-08-07 00:18:29
沒問題,快樂編碼! – 2012-08-07 00:19:09