gpt4 book ai didi

使用模板时出现 C++ 指针错误

转载 作者:行者123 更新时间:2023-11-30 03:00:36 25 4
gpt4 key购买 nike

嘿,我正在用 C++ 实现 ArrayList 的通用实现,其中一部分是实现 MergeSort,但现在我已经开始测试它,我遇到了一个奇怪的问题。在我的测试中,为了简单起见,我使用了 int 类型,在下面的第二个函数签名中,我收到了错误:

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;
}

最佳答案

在你的两个递归调用中,你没有传递指针,你传递的是数组中那些索引处的值。

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));

我不清楚你的第一个错误是什么,看起来你已经截断了部分错误消息。

关于使用模板时出现 C++ 指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11837598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com