c++ - 类型转换运算符重载问题

标签 c++ casting operator-overloading

例如我有两个类 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/

相关文章:

c++ - 如何将 merge_sort 算法连接到 Vector 和用户定义的 dynamic_array? - 去做

c++ - qt-everywhere-opensource-src-4.8.1 中没有 qtCreator

c++ - cin 在 Windows 上不能使用空字符串 when_GLIBCXX_DEBUG?

c - 我什么时候需要在 C 中进行类型转换?

c++ - 从创建线程设置线程的 "nice level"?

c++ - 我可以在这里使用 reinterpret_cast 吗?

MySQL 不将字符串转换为 int,尽管进行了转换

c# - 在 C# 中基于显式接口(interface)实现实现 == 运算符

c++ - 需要左值作为赋值的左操作数 - 数组

fortran - 使用 ifort 重载派生类型的加法时为 "Operation is invalid"