У меня есть класс с несколькими конструкторами и перегруженных операторов:C++ Неоднозначный вызов конструктора
class Utf8String
{
public:
Utf8String();
explicit Utf8String(const char * sStr);
Utf8String(const char * sStrBeg, const char * sStrEnd);
Utf8String(const char * sStr, uint32_t nCpCount);
explicit Utf8String(const Utf8String & sStr);
explicit Utf8String(const Utf8String & sStr, uint32_t nStart = 0, uint32_t nCpCount = UINT32_MAX);
Utf8String(uint32_t nCpCount, uchar32_t cCodePoint);
explicit Utf8String(long int iVal);
explicit Utf8String(double fVal);
// More stuff
inline Utf8String operator + (const char * sStr) const
{
Utf8String sRes(*this); // ERROR
return sRes += sStr;
}
inline operator const char *() const;
inline operator char *();
inline operator long int() const;
inline operator double() const;
};
По какой-то причине, я получаю сообщение об ошибке:
Error 3 error C2668: 'core::Utf8String::Utf8String' : ambiguous call to overloaded function c:\xxx\utf8string.h 280
Я попытался добавил явные ключевые слова, где казалось, имеет смысл. Я также добавил явные для всех конструкторов, просто чтобы узнать, что произойдет, но независимо от того, что я делаю, я получаю эту ошибку и могу «понять, почему».
У вас есть идея? Спасибо.
Какая строка 'utf8string.h 280'? – timrau
Тот, у кого комментарий '// ERROR', а также единственный код для реализации. – Virus721
Вы получаете ошибку, потому что два конструктора соответствуют вызову. 'Utf8String (const Utf8String & sStr)' и 'Utf8String (const Utf8String & sStr, uint32_t nStart = 0, uint32_t nCpCount = UINT32_MAX)' оба являются хорошими кандидатами. Это запрещено. Вам нужно определить один конструктор копирования, а не два. –