【问题标题】:Typecast operator overloading problem类型转换运算符重载问题
【发布时间】:2011-02-07 11:04:10
【问题描述】:

例如,我有两个类 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 会抛出错误:
error: expected type-specifier before 'B'
换行:operator B()const { return B(pVarA);}

我的猜测是,这是由于鸡和蛋的问题,因为 B 类是在 A 类之后定义的。

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

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

【问题讨论】:

  • 这些实际上被称为“转换”或“转换函数”(标准使用后者)。

标签: c++ casting operator-overloading


【解决方案1】:

尝试向前声明,然后稍后提供实际的函数定义:

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

【讨论】:

  • 你不需要对它们都进行前向声明,只需A::operator B()
【解决方案2】:

这应该可行:

class B;

class A{
    operator B()const;
};

class B{
    operator A()const { return A(pVarB); }
};

A::operator B() const { return B(pVarA); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2013-11-21
    • 1970-01-01
    • 2011-01-15
    • 2012-01-25
    • 2019-10-07
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多