Vol*_*nko 4 c++ arrays templates function
我想制作自己的库,但模板函数有一些问题。
主程序
#include <iostream>
#include "SMKLibrary.h"
int main() {
    char a[5] = {"ASFD"};
    array_print(a,5);
    return 0;
}
SMKLibrary.h
#ifndef SMKLIBRARY_H
#define SMKLIBRARY_H
#include <iostream>
template <typename T>
void array_print(const T * array[], int size);
#endif
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;
}
有人可以向我解释为什么我有这个错误吗?
您可以使函数从其参数中推断出数组大小:
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);
}
修复编译错误后您将遇到的下一个问题是链接器错误。作为 ????????在评论中说,您需要将函数定义移动到头文件中。
void array_print(const T * array[], int size);
请求一个指向数组的指针。当编译器查看函数的调用方式时,它会看到a哪个是数组而不是指向数组的指针。类型不匹配,因此模板推导失败。要解决此问题,请*从函数中删除
void array_print(const T array[], int size);