例如我有两个类 A 和 B,这样对于两个对象 a 和 b,我希望能够做到:
一个;
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 抛出错误:
错误:“B”之前需要类型说明符
对于行:operator B()const { return B(pVarA);}
我的猜测是,这是由于先有鸡还是先有蛋的问题,因为 B 类是在 A 类之后定义的。
有没有办法在仍然使用重载类型转换运算符的同时规避这种情况。如果没有,那么实现我的目标的最佳方式可能是什么。
任何帮助将不胜感激。提前致谢。
最佳答案
尝试向前声明然后稍后提供实际的函数定义:
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);
}
关于c++ - 类型转换运算符重载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4920530/