Добрый день.
Нахожусь на начальной стадии познания с++.
Столкнулся с проблемой при изучении шаблонов функций. Пример программы компилируется с ошибкой.
Сам пример
#include <iostream>
using namespace std;
template<class T, class T1> void show_array(T* array, T1 count)
{
T1 index;
for ( index = 0; index < count; index++ ) cout << array[index] << " ";
cout << endl;
}
void show_array(int *, int);
void show_array(float *, unsigned);
int main(void)
{
int pages[] = {100,200,300,400,500};
float prices[] = {10.05,20.10,30.15};
show_array(pages,5);
show_array(prices,3);
}
Ошибка при компиляции:
/tmp/cc9OaMgj.o: In function `main':
show_tem_default.cpp:(.text+0x5c): undefined reference to `show_array(int*, int)'
collect2: выполнение ld завершилось с кодом возврата 1
если объявление функции
void show_array(int *, int);
заменить на
void show_array(int, int);
то программа компилируется без ошибок и выводит нужный результат.
Также если переделать
template<class T, class T1> void show_array(T* array, T1 count)
на
template<class T, class T1> void show_array(T array, T1 count)
а объявление функций сделать
void show_array(int, int);
void show_array(float, unsigned);
программа снова компилируется без ошибок и выдает правильный результат.
Я не могу понять - при работе с массивами функция получает только указатель на сам массив, что и пишется в объявлении функции. А при таком объявлении передается только значение первого элемента в массиве.
Подскажите, как это все-таки работает?