进行了搜索,但找不到与我的查询匹配的内容,它有点具体,所以就这样吧。
我有一些模板类(Vector2、Vector3 和 Vector4)。尝试定义从 Vector2 到 3 和 4 的转换运算符,以及从 Vector3 到 2 和 4 等的转换运算符。
template <typename T>
class Vector4 {
// ...
operator Vector2<T>() const { return { x, y }; }
operator Vector3<T>() const { return { x, y, z }; }
// ...
T x, y, z, w;
// ...
}
template <typename T>
class Vector3 {
// ...
operator Vector2<T>() const { return { x, y }; }
operator Vector4<T>() const { return { x, y, z, 0 }; }
// ...
T x, y, z;
// ...
}
template <typename T>
class Vector2 {
// ...
operator Vector3<T>() const { return { x, y, 0 }; }
operator Vector4<T>() const { return { x, y, 0, 0 }; }
// ...
T x, y;
// ...
}
使用 Visual Studio 2017 给了我这个:
错误 C2833:“运算符 Vector2”不是可识别的运算符或类型
任何和所有的帮助表示赞赏。
谢谢你。
编辑:我的实际来源在类定义后确实有分号。忘了把它们放在我发布的简短版本中。另外,是的,有很多错误,但根据我的经验,它通常是第一个重要的尝试向前声明:
template <class T> class Vector 3;
template <class T> class Vector 4;
template <typename T>
class Vector2 {
// ...
}
编辑:现在我收到错误 C2988:无法识别的模板声明/定义。可能值得一提的是,这 3 个模板类位于不同的文件中。我最初尝试在一个类中包含一个标题以使类型转换运算符正常工作,这就是造成原始错误的原因。
哦是的。我一定会把这些说清楚。这总是很好的建议。虽然是当地时间 0430... :)
编辑:没关系,我是一个spaz。我不知道我是如何在 Vector 和暗淡数量“Vector 2”!=“Vector2”之间插入一个空格的。前向声明它是。不敢相信我错过了这么简单的事情。孩子们:当你被束缚时不要编码,这很好。