为啥vec3f 创建的变量不能用[ ]访问其中的元素?
编译器是vs2019
Vec3f in_box = barycentric(pts, P);
if (in_box.x < 0 || in_box.y < 0 || in_box.z < 0) continue;
P.z = 0;
for (int i = 0; i < 3; i++) {
P.z += pts[i].z * in_box[i];
}
这里的in_box[i]出错了,想访问第一个元素只能用in_box.x,可是这样在很长的循环里非常麻烦。
vec3f是一个自定义的数据结构,其中没有定义[]运算符,所以不能用[]访问其中的元素。如果想在循环中使用方便访问vec3f中的元素,可以考虑定义[]运算符。假设您有一个vec3f结构体,该结构体存储三个浮点数,分别表示x,y和z坐标:
struct vec3f {
float x;
float y;
float z;
};
如果要在程序中使用这个结构体,您可以声明vec3f类型的变量:
vec3f in_box;
然后您可以使用点运算符来访问vec3f类型的成员:
in_box.x = 1.0;
in_box.y = 2.0;
in_box.z = 3.0;
但是,如果您尝试使用下标运算符访问vec3f类型的成员,将出现错误:
in_box[0] = 1.0; // 错误:vec3f类型不支持下标运算符
如果您需要使用下标运算符访问vec3f类型的成员,则需要重载下标运算符:
struct vec3f {
float x;
float y;
float z;
float& operator[](int i) {
return *(&x + i);
}
};
vec3f in_box;
in_box[0] = 1.0; // 正确:vec3f类型重载了下标运算符
首先,是否可以使用[]来访问类的元素取决于该类是否实现了下标运算符(operator[])。因此,如果Vec3f类没有实现下标运算符,则可能会引发编译错误。如果你需要对Vec3f对象使用下标运算符,请确保该类实现了该运算符。
使用下标运算符访问 Vec3f 类型的元素,那么需要定义重载下标运算符。
struct Vec3f {
float x, y, z;
float& operator[](int i) {
return *(&x + i);
}
};
那奇怪了,Vec 类型都有重载下标运算符的呀,报错了什么?
是否有提示报错,贴下报错信息