3

为什么以下代码无法编译:

struct X
{
    struct B;

    struct A
    {
        int dummy;
        operator B();
    };

    struct B
    {
        int dummy;
    };
};

X::A::operator B()
{
    B b;
    return b.dummy = dummy, b;
}

我的 MSVC++ 2017 编译器说:

error C2833: 'operator B' is not a recognized operator or type
4

2 回答 2

1

此错误的唯一可能原因是struct Bstruct A定义时尚未定义。由于代码似乎没有错误,我的结论是您发现了编译器错误。

于 2017-12-24T13:30:53.363 回答
1

尽管B 应该在定义用户定义的转换运算符的范围内进行查找,但XMSVC 似乎把它搞砸了。

您可以通过完全限定它来帮助它:

X::A::operator X::B()
{
    B b;
    return b.dummy = dummy, b;
}
于 2017-12-24T13:30:59.417 回答