候选模板被忽略:无法将“const type-parameter-0-0 *”与“char”匹配

Vol*_*nko 4 c++ arrays templates function

我想制作自己的库,但模板函数有一些问题。

主程序

#include <iostream>
#include "SMKLibrary.h"

int main() {
    char a[5] = {"ASFD"};

    array_print(a,5);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

SMKLibrary.h

#ifndef SMKLIBRARY_H
#define SMKLIBRARY_H

#include <iostream>

template <typename T>
void array_print(const T * array[], int size);

#endif
Run Code Online (Sandbox Code Playgroud)

SMKLibrary.cpp

#include "SMKLibrary.h"

template <typename T>
void array_print(const T * array[], int size) {
    int last = size - 1;
    for (int i = 0; i < last; i++) {
        std::cout << array[i] << " ";
    }
    std::cout << array[last] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么我有这个错误吗?

mar*_*inj 6

您可以使函数从其参数中推断出数组大小:

template <typename T, std::size_t size>
void array_print(T(&array)[size]) {
    int last = size - 1;
    for (int i = 0; i < last; i++) {
        std::cout << array[i] << " ";
    }
    std::cout << array[last] << std::endl;
}

int main()
{
    char a[5] = {"ASFD"};
    array_print(a);
}
Run Code Online (Sandbox Code Playgroud)

修复编译错误后您将遇到的下一个问题是链接器错误。作为 ????????在评论中说,您需要将函数定义移动到头文件中。


Nat*_*ica 5

void array_print(const T * array[], int size);
Run Code Online (Sandbox Code Playgroud)

请求一个指向数组的指针。当编译器查看函数的调用方式时,它会看到a哪个是数组而不是指向数组的指针。类型不匹配,因此模板推导失败。要解决此问题,请*从函数中删除

void array_print(const T array[], int size);
Run Code Online (Sandbox Code Playgroud)