【发布时间】:2013-09-03 02:21:24
【问题描述】:
问题
我有两个类:一个 4 元素向量 (Vec4) 和一个 4x4 矩阵 (Mat4)。 我正在尝试在每个类中为另一个类定义乘法运算符:
class Mat4;
class Vec4;
class Vec4
{
public:
float x, y, z, w;
const Vec4 operator *(const Mat4& m)const
{
Vec4 r;
//...
return r;
}
};
class Mat4
{
public:
Mat4()
{ //... }
union
{
Vec4 v[4];
float m[4][4];
struct
{
float _11, _12, _13, _14,
_21, _22, _23, _24,
_31, _32, _33, _34,
_41, _42, _43, _44;
};
};
const Vec4 operator *(const Vec4& x)const
{
Vec4 r;
//...
return r;
}
编译器 (MSVC++) 在 Vec4::operator * 处阻塞,吐出错误
C2027: use of undefined type 'Mat4'
如你所见,我已经在它们各自的定义之前声明了这两个类
class Mat4;
class Vec4;
非常感谢任何关于我如何在不引起这些竞争问题的情况下使用此运算符的建议。
【问题讨论】:
-
只需将类中的方法签名和另一个文件中的实现签名即可
-
对于前向声明的类,您无能为力。在两个类的定义可见的类定义之外定义成员函数。
-
不要让它们成为成员函数,只需将运算符放在它们的共享命名空间中即可。
-
谢谢 jthill,这正是我正在寻找的答案。我并不是特别想在单独的文件中声明它们。