求助|c++ 模板函数显示具体化出错
910
2024.01.26
发布于 未知归属地

刚刚学习c++ primer plus的模板函数那一节,自己试了一下,一直报错说:
显式专用化;“const char *maxn<char*>(const char *[],int)”不是函数模板的专用化
感觉这里的char*不能替换T,一用指针类型替换就出错,不知道为什么,求助

代码

使用一段 行内代码

代码片段

#include <iostream>
#include <cstring>

template <typename T>
const T maxn(const T arr[], int n) {
    T max = arr[0];
    for (int i = 1; i < n; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}

template <>
const char* maxn<char*>(const char* arr[], int n) {
    const char* longest = arr[0];
    size_t max_length = std::strlen(arr[0]);

    for (int i = 1; i < n; i++) {
        size_t current_length = std::strlen(arr[i]);
        if (current_length > max_length) {
            longest = arr[i];
            max_length = current_length;
        }
    }
    return longest;
}

int main() {
    int intArray[] = { 1, 5, 3, 8, 2, 7 };
    double doubleArray[] = { 3.2, 1.1, 6.4, 2.8 };

    const char* stringArray[] = { "apple", "banana", "kiwi", "orange", "grape" };

    std::cout << "Max of intArray: " << maxn(intArray, 6) << std::endl;
    std::cout << "Max of doubleArray: " << maxn(doubleArray, 4) << std::endl;
    std::cout << "Longest string: " << maxn(stringArray, 5) << std::endl;

    return 0;
}
评论 (7)