嵌套类

时间:2017-12-24 13:20:30

标签: c++ visual-c++ operator-overloading conversion-operator

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

即使B 应该在X的范围内查找,因为正在定义用户定义的转换运算符,但MSVC似乎将其搞砸了。

你可以通过完全限定它来解决它:

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