C2664: явный оператор приведения не приведен должным образом - PullRequest
0 голосов
/ 24 января 2019

Мой тестовый класс XString имеет два оператора приведения.Но компилятор не использует явное приведение operator const wchar_t*() для fooA.Почему?

class XString
{
public:
    operator const CString&();
    explicit operator const wchar_t*();
};

void fooA(const wchar_t* s);
void fooB(const CString& s);

void test()
{
    XString x;

    CString c = x; //OK

    fooA(x); //Error C2664: 'void fooA(const wchar_t *)': cannot convert argument 1 from 'XString' to 'const wchar_t *'

    fooB(x); //OK
}

1 Ответ

0 голосов
/ 24 января 2019

Поскольку operator const wchar_t* равно explicit, преобразование не будет выполнено неявно.В этом смысл explicit.

Вы можете принудительно преобразовать, используя static_cast:

fooA(static_cast<const wchar_t*>(x));
...