2014-09-10 3 views
0

Я читал, что это может быть проблема IntelliSense, но я действительно не знаю, правда это или нет. Когда я компилирую код, я получаю сообщение об ошибке (название) и не знаю, как его исправить. Моя книга («Sams C++ Primer Plus» от Stephen Prata) не отвечает на мою проблему. Я написал довольно похожую программу, и проблема не появилась.Ни один экземпляр шаблона функции не соответствует указанному типу

Возможно, проблема в спецификации типа? Это то же самое, что и шаблон? ДЕЙСТВИТЕЛЬНО извините за мой язык ...

#include <iostream> 

template <typename T> 
T maxn(T tab[], int size); 

template <> float maxn<float>(float, int); // Problem appears here... 

int main() 
{ 
    std::cin.get(); 
    return 0; 
} 

template <typename T> 
T maxn(T tab[], int size) 
{ 
    T max = tab[0]; 
    for (int i = 1; i < size; i++) 
    { 
     if (tab[i] > max) max = tab[i]; 
    } 
} 

Я ценю любое предложение. Благодаря!

+0

Пожалуйста, по крайней мере, сообщите об ошибке, которую вы получаете. Можете ли вы также опубликовать часть другой программы, которая действительно работала? – Gutblender

ответ

1

Первый аргумент специализации неверен. Вы даете float, но в соответствии с шаблоном он должен быть массивом поплавков.

template <> float maxn<float>(float[], int); 
//        ^
// You need to indicate that the first parameter is an array. 

Обратите внимание, что вы не объявляете орган по специализации, поэтому привязка будет выполнена, если вы пытаетесь использовать его. (Если вы не обеспечиваете реализацию в другом компиляционном блоке.)

+0

О ... Так что специализация должна иметь тот же набор параметров, что и шаблон. Спасибо! (У меня нет тела специализации, потому что я прервал запись, когда произошла ошибка) – Seu

+0

@Seu Да, в противном случае вы не специализируетесь на шаблоне, вы просто предоставляете перегрузку - что хорошо , это просто не будет шаблоном специализации. ('float maxn (float, int);' будет действительным.) – cdhowie

Смежные вопросы