gpt4 book ai didi

C++ 'No matching function for call to' 模板

转载 作者:行者123 更新时间:2023-11-28 00:18:34 25 4
gpt4 key购买 nike

我有一个家庭作业,我需要修改旧作业以使用模板。

最初的任务要求对动态分配的整数数组进行随机排序,我需要创建一个模板将其扩展到字符串和 double 。我正在使用一个 while 循环和一个 switch-case 来向用户展示一个菜单,他们可以在其中决定他们使用的是哪种类型并填充数组。

我已尝试尽可能减少它,以使调试更容易。整数实现没有编译器错误,但 double 和字符串变体会。

int* pPresortedInts = NULL; //pointer to array of ints
std::cout << std::endl << "How many integers did you want to sort? ";
std::cin >> sizeOfArray;
pPresortedInts = new int[sizeOfArray]; //dynamically allocate array

//prompt user to fill array
std::cout << std::endl << "Great! Please enter " << sizeOfArray << " numbers: ";
for (int counter = 0; counter < sizeOfArray; counter++) {
std::cin >> pPresortedInts[counter];
}

//output filled array
std::cout << std::endl << std::endl << "Here are the integers in their original order: ";
for (int counter = 0; counter < sizeOfArray; counter++) {
std::cout << std::endl << pPresortedInts[counter];
}
std::cout << std::endl << std::endl;

//shuffle elements and print the result
shuffleSort(pPresortedInts, sizeOfArray);

//Remember to delete dynamically allocated arrays
delete [] pPresortedInts;
pPresortedInts = NULL;

双重实现:

double* pPresortedDoubles = NULL; //pointer to array of doubles
std::cout << std::endl << "How many doubles did you want to sort? ";
std::cin >> sizeOfArray;
pPresortedDoubles = new double[sizeOfArray]; //dynamically allocate array

//prompt user to fill array
std::cout << std::endl << "Great! Please enter " << sizeOfArray << " numbers: ";
for (int counter = 0; counter < sizeOfArray; counter++) {
std::cin >> pPresortedDoubles[counter];
}

//output filled array
std::cout << std::endl << std::endl << "Here are the doubles in their original order: ";
for (int counter = 0; counter < sizeOfArray; counter++) {
std::cout << std::endl << pPresortedDoubles[counter];
}
std::cout << std::endl << std::endl;

//shuffle elements and print the result
shuffleSort(pPresortedDoubles, sizeOfArray);

//Remember to delete dynamically allocated arrays
delete [] pPresortedDoubles;
pPresortedDoubles = NULL;

最后,这是模板本身:

template <class T>
void shuffleSort(T pPresortedArray[], T size) {
T* pShuffledArray = new T[size]; // pointer to dynamically allocated array of a generic type
T randomElement;
T temp;

//fill ShuffledArray with PresortedArray
for (int counter = 0; counter < size; counter++) {
pShuffledArray[counter] = pPresortedArray[counter];
}

for (int counter = 0; counter < size; counter++) {
randomElement = rand()%size; // choose a random element from the ShuffledArray array
//swap that element with the currently selected counter
temp = pShuffledArray[randomElement];
pShuffledArray[randomElement] = pShuffledArray[counter];
pShuffledArray[counter] = temp;
}
std::cout << "Shuffled array: ";
//print the (hopefully) shuffled array
for (int counter = 0; counter < size; counter++) {
std::cout << std::endl << pShuffledArray[counter];
}
std::cout << std::endl << std::endl;

//Delete dynamically allocated array within scope
delete [] pShuffledArray;
pShuffledArray = NULL;
}

我试过了 specifying the type在函数调用时,但这并没有解决错误。我认为我的问题与 taking arguments by reference 无关, 要么。

我更喜欢 Gist 来阅读代码,所以我上传了 entire program there ,以及作业描述(以防万一)。

感谢您的帮助!

最佳答案

这似乎是错误的

void shuffleSort(T pPresortedArray[], T size) {

为什么要模板化数组的大小,它总是 size_t

void shuffleSort(T pPresortedArray[], size_t size) {

我怀疑您用“T”全局替换了“int”:-)

关于C++ 'No matching function for call to' 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732522/

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