Если я рискну предположить, что eOperandType
является типом перечисления, то имеет смысл, что вы не можете конвертировать "20"
в него.Кроме того, вы передаете int*
, где ожидается int&
.Обратите внимание на сигнатуру вашей функции:
template <typename T>
void convertValue(eOperandType, const std::string&, IntOperandType, T&)
и сравните это с тем, как вы вызываете функцию:
convertValue<int>("20", eOperandType::Int8, IntOperandType::_Int8, &v);
Здесь ваши параметры имеют следующие типы:
const char[3], eOperandType, IntOperandType, int*
Заметили несоответствие из подписи?Вы, вероятно, хотите назвать это так:
int v = 0;
Converter::convertValue<int>(eOperandType::Int8, "20", IntOperandType::_Int8, v);
, где "20"
неявно преобразуется в const std::string&
, а v
, который является lvalue типа int
, может быть неявно связан сlvalue ссылка на int
, int&
.