Ошибка C C2665: ни одна из 2 перегрузок не смогла преобразовать все типы arg

#c #overloading

Вопрос:

во file.hpp мне есть

 void func(std::vector<double>amp; vec, const std::pair<const A, const B>amp; map,
          const Camp; swap, const V* v, const Damp; date1, const Damp; date2, const int dim);
 

в file2.cpp

 void func2(std::vector<double>amp; vec, const Aamp; p1, const Bamp; p2,
          const Camp; swap, const V* v, const Damp; date1, const Damp; date2, const int dim) {
    func(vec, make_pair(p1, p2), swap, v , date1, date2, dim);
}
 

Ошибка кроется в строке func(vec, std::make_pair<p1, p2>, swap, v, date1, date2, dim)

в нем говорится: ни одна из двух перегрузок не смогла преобразовать все типы аргументов (я перегрузил func функцию).

Комментарии:

1. Похоже , ты зарабатываешь std::pair<const Aamp;, const Bamp;> , нет?

2. Ваш блок кода и следующая строка несовместимы: у вас было std::make_pair<p1,p2> или make_pair(p1, p2) ? Оба варианта неверны, но первый дает сообщение об ошибке. Должно быть гибридом двух: std::make_pair(p1, p2) .

3. в моем коде это std::make_pair(p1, p2) извините

4. Тогда… не воспроизводимо. Я дал несколько фиктивных определений для ваших A, B, C, D, V типов, и код компилируется.

5. Но, как говорит @AlexeyLarionov, возможно A , проблема в ссылках на B и в этом — трудно сказать, не зная, как определяются эти типы.