Написал шаблон функции, описал функцию, но компилятор выдает мне такую ошибку:
error: no matching function for call to ‘firstNeg(int [2][2], int, int)’
Вот код:
#include <stdio.h>
template<class T> T firstNeg(T array, T dim2, T curDim) {
for (int i = curDim; array[i]; i += dim2) {
if (array[i] < 0)
return array[i];
}
return 0;
}
int firstNeg(int* array, int dim2, int curDim);
/*int firstNeg(int* array, int dim2, int curDim) {
for (int i = curDim; array[i]; i += dim2) {
if (array[i] < 0)
return array[i];
}
return 0;
}*/
main() {
int dim2 = 2;
int array[2][2] = { {1, 2}, {-1, -2} };
// вызов функции с указателем
int i = firstNeg(array, 2, 0);
printf("%i \n", i);
}
В чем заключается ошибка?
Передать в шаблонную функци массив можно двумя способами:
1) Передача по ссылке:
template<class T, std::size_t s1, std::size_t s2>
void func(T(& name)[s1][s2])
{
std::cout << "Array by reference" << std::endl;
std::cout << s1 << " " << s2 << std::endl;
std::cout << name[0][0] << " " << name[s1 - 1][s2 - 1] << std::endl;
}
int main()
{
int mas[2][3] = { {0, 1, 2}, {3, 4, 5} };
func(mas);
}
2) Передача по указателю:
template<class T, std::size_t s1, std::size_t s2>
void func2(T(*name)[s1][s2])
{
std::cout << "Array by pointer" << std::endl;
std::cout << s1 << " " << s2 << std::endl;
std::cout << (*name)[0][0] << " " << (*name)[s1 - 1][s2 - 1] << std::endl;
}
int main()
{
int mas[2][3] = { {0, 1, 2}, {3, 4, 5} };
func2(&mas);
}
В принципе можно передавать массив как просто указатель и потом кастовать к типу массива или двойному указателю, но не думаю что это то что Вам нужно, да и, как по мне, не очень это правильно.
Ну вот например,
T firstNeg(T array, T dim2, T curDim)
пусть T - int. Т.е. array - просто число. И что должно собой представлять array[i]? :)
Но это к самой функции. Вот вы ей передаете firstNeg(array, 2, 0);
Но ведь у вас по шаблону судя, типы array, 2 и 0 должны быть одинаковы. Но разве ваш array - это int?
Всё понятно? или разжевывать дальше?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости