例如我有两个A和B类,这样对于两个对象a和b,我希望能够这样做:
A;
B b;
a = b;
b = a;
为此我已经重载了=运算符,并且类型转换运算符为:
class A{
-snip-
operator B()const { return B(pVarA); }
};
class B{
-snip-
operator A()const { return A(pVarB); }
};
但是当我尝试编译这段代码时,gcc会抛出错误:
error: expected type-specifier before 'B'
对于该行:operator B()const { return B(pVarA);}
我的猜测是,这是由于鸡和蛋的问题,因为B类是在A级之后定义的。
有没有办法在仍然使用重载的类型转换运算符时绕过这个。如果没有,那么可能是实现目标的最佳方式。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:6)
尝试声明,然后在以后提供实际的函数定义:
class B;
class A{
-snip-
operator B()const;
};
class B{
-snip-
operator A()const;
};
inline A::operator B() const
{
return B(pVarA);
}
inline B::operator A() const
{
return A(pVarB);
}
答案 1 :(得分:2)
这应该有效:
class B;
class A{
operator B()const;
};
class B{
operator A()const { return A(pVarB); }
};
A::operator B() const { return B(pVarA); }