У меня есть класс строк:Понимание метода перегрузки правила
#include <stdint.h>
class CString {
public:
CString() {}
explicit CString(uint64_t ui64, int width = -1, int base = 10, char fillChar = ' ') {}
CString(const char * str) {}
CString arg(const CString& argument) const {return CString();}
template <typename T>
inline CString arg(T argument, int width = -1, int base = 10, char fillChar = ' ') const
{
return arg(CString(argument, width, base, fillChar));
}
};
Теперь я использую этот класс:
void main()
{
CString str;
str.arg("123");
}
И получаю ошибку:
error C2665: 'CString::CString' : none of the 4 overloads could convert all the argument types
1> source.cpp(6): could be 'CString::CString(uint64_t,int,int,char)'
1> while trying to match the argument list '(const char *, int, int, char)'
1> source.cpp(22) : see reference to function template instantiation 'CString CString::arg<const char*>(T,int,int,char) const' being compiled
1> with
1> [
1> T=const char *
1> ]
Почему Безразлично 't arg(CString&)
вызывается, используя конструктор CString(const char *)
?
Ваша версия шаблона 'arg()' требует, чтобы по крайней мере два аргумента были invokable, но вы передаете один. – Nawaz
@Nawaz: спасибо, исправлено и отредактировано вопрос (до сих пор не компилируется). –