Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Candidate template ignored: could not match 'const type-parameter-0-0 *' against 'char'

I want to make my own library and I have some problems with template function's.

main.cpp

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

Can someone explain to me why I have this error?

like image 399
Volodymyr Samoilenko Avatar asked Apr 25 '16 15:04

Volodymyr Samoilenko


1 Answers

You can make function deduce array size from its argument:

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

also the next problem you will encounter after fixing compilation error, is linker error. As πάντα ῥεῖ said in comments, you need to move your function definition to header file.

like image 159
marcinj Avatar answered Nov 15 '22 00:11

marcinj