Литерал 0
имеет два значения в C ++.
С одной стороны, это целое число со значением 0.
С другой стороны, это константа с нулевым указателем.
Поскольку ваша функция setval
может принимать либо int
, либо char*
, компилятор не может решить, какую перегрузку вы имели в виду.
Самое простое решение - просто привести 0
к нужному типу.
Другой вариант - обеспечить предпочтительную перегрузку int
, например, сделав другой шаблон:
class huge
{
private:
unsigned char data[BYTES];
public:
void setval(unsigned int);
template <class T> void setval(const T *); // not implemented
template <> void setval(const char*);
};