相互依赖的类定义
Interdependent class definitions
问题
我有两个类: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:使用未定义类型"Mat4"
正如你所看到的,我已经在它们各自定义为之前声明了这两个类
class Mat4;
class Vec4;
任何关于我如何在不引发这些种族问题的情况下拥有这个运营商的建议都将不胜感激。
问题出现了,因为在同一个文件中有定义和实现。尝试将定义(原型)拆分到头文件中,只使用指向其他类的指针,并将实现放入一个单独的c++文件中,该文件包括头文件和其他类的头。
基本上,它告诉你,它确实知道,有一个Mat4和一个Vec4类。。。但它对它一无所知,除非你告诉它去哪里看。
这里仅仅向前声明是不够的。这告诉编译器是一个类型Mat4,但仅此而已。虽然您可以在签名中使用它(带有指针和引用),但在定义之前不可能使用它。因此,您需要将声明和定义拆分到不同的文件中。
相关文章:
- 为什么即使直到最后才定义实际类型,也可以将依赖名称视为完整
- (Wix 安装程序)如何包含自定义操作依赖项
- 如何定义依赖于参数包转换的函数的返回类型
- FBString 的小字符串优化是否依赖于未定义的行为?
- 错误 LNK1104:错误消息中显示的路径未在其他依赖项中定义
- 循环依赖结构,使用前向声明时结构的错误重定义
- 使用 libpthread 在共享库中未定义的行为,但不将其作为依赖项在 ELF 中
- 如何在C++中声明/定义相互依赖的模板?
- 继承依赖类型定义而不使用结构
- g++ 生成依赖项文件缺少用户定义的标头
- 单独库中的类成员函数定义和链接依赖项
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 如何打破定义嵌套模板类的标头的圆形依赖关系
- 如何定义具有依赖于符号调试的参数的函数
- Visual Studio:用户依赖定义
- 依赖GCC/LLVM的"-fexceptions"在技术上是未定义的行为吗?
- 如何定义依赖于模板参数的类型定义
- 无法定义依赖类型定义的成员
- 使用"std::conditional_t"定义依赖于其模板参数的类"typedef"
- Node c++插件/ v8 /自定义依赖