При объявлении шаблонной функции с явной специализацией для строки( тип char*) появляется ошибка “отсутствуют экземпляры шаблон функции”
void Function(int *array, int size)
{
for (int i = 0;i < size;i++)
{
array[i] = rand();
cout << array[i] << "\t";
}
cout << endl;
cout << "_____________________________________________" << endl;
}
void Function(float *array,int size)
{
FILE *fp;
fp = fopen("1doc.txt", "r");
if (fp == NULL)
{
cout << "не удалось открыть файл" << endl;
}
for (int i = 0;i < size;i++)
{
fscanf(fp, "%f", &array[i]);
}
fclose(fp);
for (int i = 0;i < size;i++)
{
cout << array[i] << "\t";
}
cout << endl;
cout << "___________________________________" << endl;
}
void Function(char *array)
{
FILE *fp;
fp = fopen("2doc.txt", "r");
if (fp == NULL)
{
cout << "не удалось открыть файл" << endl;
}
int k = 0;
while (!feof(fp))
{
fscanf(fp, "%c", &array[k]);
k++;
}
fclose(fp);
cout << array << endl;
cout << "________________________________________" << endl;
}
template <typename T, typename T3>
T Max(T *&arr, T3 &size)
{
T max = T(0);
for (int i = 0; i < size; i++)
{
if (abs(arr[i]) > max)max = abs(arr[i]);
}
return max;
}
template <typename T1, typename T2>
T1 Min(T1 *&arr, T2 &size)
{
T1 min = arr[0];
for (int i = 0; i < size; i++)
{
if (abs(arr[i]) < min)min = abs(arr[i]);
}
return min;
}
template <typename H>
H Summas(H *&arr, int &size)
{
H value = H(0);
for (int i = 0; i < size; i++)
{
value = value + arr[i];
}
return value;
}
template<>
char* Summas<char*>(char *&arr, int &size)
{
}
template <typename H2, typename H3>
void push_back(H2 *&arr,H3 &size)
{
H2 *newarr = new H2[size + 2];
for (int i = 0; i < size; i++)
{
newarr[i] = arr[i] + (Max(arr, size) + Min(arr, size)) / 2;
}
newarr[size] = Max(arr, size);
newarr[size + 1] = Summas(arr, size);
for (int i = 0; i < size+2;i++)
{
cout << newarr[i] << "\t";
}
cout << endl;
}
int main()
{
setlocale(LC_ALL, "");
int size1 = 50, size2 = 25, size3 = 15;
int *arr1=new int[size1];
float *arr2=new float[size2];
char *arr3=new char[size3];
Function(arr1,size1);
Function(arr2,size2);
Function(arr3);
push_back(arr1, size1);
cout << "_________________________________" << endl;
push_back(arr2, size2);
delete[] arr1;
delete[] arr2;
delete[] arr3;
return 0;
}
Если исходный шаблон объявлен как
template <typename H>
H Summas(H *&arr, int &size)
то его специализация для char *
будет иметь вид (подставляем char *
вместо H
)
template<>
char* Summas<char*>(char **&arr, int &size)
Сравните с тем, что написано у вас и причина ошибки станет понятна.
При этом специализацию можно объявить и чуть короче
template<>
char* Summas(char **&arr, int &size)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
По ТЗ необходимо реализовать построчную закраску многоугольника в двух вариантах - с задержкой после отрисовки каждой линии и без нееЕсть...
есть программа, как в аргументы функции передать целый класс, и его изменять так, что-бы именения были видны в main()?
Пытаюсь получить транспонированную матрицу, но выдает ошибку Выражение должно иметь константное значение n, m; Не могу понять что не так, пример...