Typecast运算符重载问题

时间:2011-02-07 11:04:11

标签: c++ casting operator-overloading

例如我有两个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级之后定义的。

有没有办法在仍然使用重载的类型转换运算符时绕过这个。如果没有,那么可能是实现目标的最佳方式。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 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); }