【发布时间】:2019-07-27 19:47:23
【问题描述】:
假设您有两种结构类型,一种是int 成员,另一种是float。
struct i {
int a, b;
i(int a, int b): a(a), b(b) {}
};
struct f {
float a, b;
f(float a, float b): a(a), b(b) {}
};
我们要定义两个转换运算符,从i 到f,反之亦然。如果我们尝试通过运算符重载来做到这一点
struct i {
int a, b;
i(int a, int b): a(a), b(b) {}
operator f() const { return f(a, b); };
};
struct f {
float a, b;
f(float a, float b): a(a), b(b) {}
operator i() const { return i(a, b); };
};
我们遇到了声明顺序的问题,因为i 需要知道f 而f 需要知道i。此外,强制转换运算符必须在类中声明。 f 的前向声明不起作用。
有解决办法吗?
【问题讨论】:
-
您的代码有很多语法错误。如果你修复它们,前向声明就会起作用。
-
强制转换运算符必须返回它强制转换的类型而不是其他类型...所以它不是 int() 而是 i()!
-
我现在已经修正了错别字。问题是“
use of undefined type 'f'”。