2017-02-19 35 views
1

мне нужна ваша помощьОшибка при установке сложных аргументов в функции min? Почему? (Eclipse, C++)

if(s[i]==t) 
{ 
    //I get error for this 
    //aSP[pos] = min((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

    //Then I replace the above code with the following codes, and then it worked 
    int a = (dfs(i)+pow(i-pos,2)); 
    int b = aSP[pos];    
    aSP[pos] = min(a,b); 
} 

Но они являются же правильно? Почему я получаю ошибку от Eclipse?
Это говорит

Описание ресурсов Путь Расположение Тип Недопустимые аргументы " Кандидаты: сопзЬ # 0 & мин (Const # 0 &, сопзЬ # 0 &)

Описание Путь информационного ресурса Тип нет функция соответствия для вызова to 'min (__ gnu_cxx :: __ promotion_2 :: __ type, int &)' ColorfulRoad.h/colorfulroad-C++ line 53 C/C++ Задача

и некоторая другая информация, а также, как и противоречивого типа для параметров, аргументы шаблона дедукции/замещение не удалось ..

ответ

2

сообщения об ошибке означает, что в этой функции вызова

aSP[pos] = min((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

первый и второй аргументы имеют различные типы. Поэтому компилятор не может определить тип параметра шаблона.

Вы можете помочь компилятору явно указать аргумент шаблона. Например,

aSP[pos] = min<int>((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

Во втором вызове функции оба аргумента имеют тип int. Таким образом, параметр шаблона выводится на int.

1

Это легче понять, если у вас есть GCC ошибка вместо:

error: no matching function for call to 'min(double, int)' 
    std::min(2.0, 3); 
        ^

Just вставить первый аргумент в int.

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

  • Нет связанных вопросов^_^