【发布时间】:2015-05-22 08:16:51
【问题描述】:
我有一个包含多个构造函数和重载运算符的类:
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是哪一行? -
有
// ERROR注释的,也是唯一一个包含实现代码的。 -
您收到错误是因为两个构造函数与调用匹配。
Utf8String(const Utf8String& sStr)和Utf8String(const Utf8String& sStr, uint32_t nStart = 0, uint32_t nCpCount = UINT32_MAX)都是不错的候选人。这是不允许的。您需要定义一个复制构造函数,而不是两个。
标签: c++ constructor operator-overloading implicit-conversion explicit