Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245

Ошибка компиляции: template-id does not match any template declaration

17.03.2014, 23:23. Показов 5363. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите, пожалуйста:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
using namespace std;
 
template <typename T>
T maxn(T*, const int*);
 
template <>
char* maxn<char*>(char*, const int*);
 
int main(int argc, char **argv)
{
    //test arrays:
    const int ari_size = 6;
    int ari[ari_size] = {7, 11, 7, 9, 9, 21};
    const int ard_size = 4;
    double ard[ard_size] = {4.1, 0.01, 71.9, 43};
    const int ars_size = 5;
    const char* ars[ars_size] = {
        "Jammy house",
        "Extraterrestial intelligence",
        "Generally electrical",
        "Free Kenny",
        "Central substance"
    };
    
    return 0;
}
 
template <typename T>
T maxn(const T* ar, const int* limit) {
    T curmax = 0, absmax = 0;
    for (int i = 1; i < *limit; ++i)
        if (ar[i] > ar[i-1]) {
            curmax = ar[i];
            if (curmax > absmax)
                absmax = curmax;
        }
    return absmax;
}
 
template <>
char* maxn<char*>(char* ar, const int* limit) {
    int curmax = 0, absmax = 0, max_ind = 0;
    for (int i = 0; i < *limit; ++i) {
        while (ar[i][j] != '\0')
            ++j;
        if (j > curmax) {
            curmax = j;
            if (curmax > absmax) {
                absmax = j;
                max_ind = i;
            }
        }
    }
    return ar[max_ind];     
}
Вот что выдал компилятор:
g++ -Wall -c "main.cxx" (в каталоге: /home/drew/Документы/dev/c++/Stephen Prata/8.6)
main.cxx:9:7: ошибка: template-id «maxn<char*>» for «char* maxn(char*, const int*)» does not match any template declaration
main.cxx: В функции «int main(int, char**)»:
main.cxx:15:6: предупреждение: неиспользуемая переменная «ari» [-Wunused-variable]
main.cxx:17:9: предупреждение: неиспользуемая переменная «ard» [-Wunused-variable]
main.cxx:19:14: предупреждение: неиспользуемая переменная «ars» [-Wunused-variable]
main.cxx: At global scope:
main.cxx:43:7: ошибка: template-id «maxn<char*>» for «char* maxn(char*, const int*)» does not match any template declaration
Сборка завершилась с ошибкой.


Только учу сейчас шаблоны и специализации, поэтому не могу разобраться с ошибками (с предупреждениями там все ясно).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2014, 23:23
Ответы с готовыми решениями:

Ошибка: friend declaration declares a non-template function
Всем доброго времени суток! Я корплю над задачкой: нада сделать класс вектор шаблонным, перегрузить операции ввода-вывода, и тд и тп. ...

<Template>. Ошибка компиляции
Пытаюсь сделать Темплате Array, который бы принимал класс Point. Объект класса Point состоит из 2х точек координаты x и y. Мне надо...

Ошибка с django.Template.Template
Из учебника djbook: http://djbook.ru/ch04s02.html В самом начале представлен пример использования шаблонов: &gt;&gt;&gt; from django...

6
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
17.03.2014, 23:37
Специализация шаблонной функции не соответствует основному шаблону:
C++
1
2
3
4
5
6
template <typename T>
T maxn(const T* ar, const int* limit)
/* .... */
template <>
char* maxn<char*>(char* ar, const int* limit)
/* ... */
В специализации вместо T просто поставь char. Тогда получится:
C++
1
2
template <>
char maxn<char>(const char* ar, const int* limit)
Добавлено через 1 минуту
Либо, если нужен именно char*:
C++
1
2
template <>
char* maxn<char*>(const char** ar, const int* limit)
1
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
17.03.2014, 23:47  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Специализация шаблонной функции не соответствует основному шаблону:
Да, нужно именно char*.
Аа, понял, у меня же: const char* ars[ars_size] отсылается аргументом к шаблону, поэтому и параметр должен быть const char** ar.
Спасибо!!

Добавлено через 6 минут

Не по теме:

Ну, всмысле, будет отсылаться (там еще не реализовано).

0
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
17.03.2014, 23:48
Лучший ответ Сообщение было отмечено andrejap как решение

Решение

Некий тип и указатель на этот тип - это разные типы. Как int и string, к примеру.
Если в шаблоне написано
C++
1
2
template<typename T>
T func(T t)
то специализация не может быть такой, к примеру:
C++
1
2
3
4
5
template<>
char func<char>(char* t)
 
template<>
int func<int>(string t)
а везде, вместо T должен стоять тип, указанный в <> в специализации.
0
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
17.03.2014, 23:55  [ТС]
Разъяснил, спасибо!
0
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
15.08.2016, 03:34
Тоже решаю это задание и столкнулся с такой сложностью: по условию специализация должна возвращать адрес первой максимальной по длине строки в массиве, то есть, тип возвращаемого значения должен быть char**, однако, судя по написанному здесь, тип возвращаемого значения для специализации должен быть char*. Если поменять специализацию на char**, то получается, что аргумент функции нужно менять с char** на char***? По крайней мере, вариант
C++
1
2
3
4
5
template <> char** maxn<char**>(char **ar, int n)
{
...
    return &ar[index_of_max_length_string];
}
всё ещё вызывает ту же самую ошибку.
0
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
15.08.2016, 10:11
VergilYamato, если в качестве строки используется char*, то адрес этой строки - это адрес её первого символа. И для специализации надо использовать char*.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.08.2016, 10:11
Помогаю со студенческими работами здесь

Error: template declaration of (Code::Blocks)
Помогите побороть ошибки. Код:#include &lt;cstdlib&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier
Решил подправить свой класс с использованием шаблонов, но столкнулся со следующим косяком. Если я прописываю тело функций внутри описания...

Template definition of non-template при использовании частичной спецификации шаблонов
Всем привет! Есть задача написать шаблон класса, принимающего в качестве параметров типа шаблон и некоторый тип. Собственно, вот код: ...

'MyQueue' : use of class template requires template argument list
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки 'MyQueue' : use of class template...

В чем различие template <typename T> от template <class T> ?
Добрый день ! Заметил в новых книгах применение записи template &lt;typename T&gt; вместо template &lt;class T&gt; в чем же тогда фишка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru