为什么以下代码无法编译:
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
答案 0 :(得分:1)
此错误的唯一可能原因是struct B
未定义 - 但是在定义struct A
时。由于代码似乎没有错误,我的结论是你发现了编译器错误。
答案 1 :(得分:1)
即使B
应该在X
的范围内查找,因为正在定义用户定义的转换运算符,但MSVC似乎将其搞砸了。
你可以通过完全限定它来解决它:
X::A::operator X::B()
{
B b;
return b.dummy = dummy, b;
}