gpt4 book ai didi

c++ - 下标 ("[ ] ")运算符给出奇怪的错误

转载 作者:太空狗 更新时间:2023-10-29 20:20:30 31 4
gpt4 key购买 nike

我从 visual studio 得到了一些奇怪的行为,关于以下代码片段,错误列表显示了 E0349 的几个实例:没有运算符“[]”匹配这些操作数。

Intellisense 似乎暗示类型不匹配,但正如您将在代码中看到的那样,不存在类型不匹配。

首先,为了制作 mat4,我定义了一个 Vec4 结构:(我只包含了相关的功能)

struct Vec4f
{
union
{
struct { float x, y, z, w; };
struct { float r, g, b, a; };
};
// copy constructor
Vec4f(Vec4f const & v) :
x(v.x),
y(v.y),
z(v.z),
w(v.w)
{

}
// Operators
float & operator[](int index)
{
assert(index > -1 && index < 4);
return (&x)[index];
}

Vec4f & operator=(Vec4f const & v)
{
// If I use: "this->x = v[0];" as above, E0349
this->x = v.x;
this->y = v.y;
this->z = v.z;
this->w = v.w;
return *this;
}
}

使用上面的 Vec4 类,我创建了一个 4x4 矩阵:

struct Mat4f
{
//storage for matrix values
Vec4f value[4];

//copy constructor
Mat4f(const Mat4f& m)
{
value[0] = m[0]; // calling m[0] causes E0349
value[1] = m[1];
value[2] = m[2];
value[2] = m[3];
}

inline Vec4f & operator[](const int index)
{
assert(index > -1 && index < 4);
return this->value[index];
}
}

当调用任何“[]”运算符时,我都会遇到这个 E0349 错误,而且我不明白这个问题。奇怪的是,该文件编译得很好。我曾尝试按照另一个问题的答案中的建议删除隐藏的“.suo”文件,但无济于事。我很感激向我解释这一点。

最佳答案

Mat4f::operator[] 是一个非常量成员函数,不能在 Mat4f::Mat4f< 的参数 m 上调用,它被声明为 const & Mat4f

您可以添加另一个 const 重载,它可以在常量上调用。例如

inline Vec4f const & operator[](const int index) const
// ~~~~~ ~~~~~
{
assert(-1 < index && index < 4); // As @Someprogrammerdude commented, assert(-1 < index < 4) doesn't do what you expect
return this->value[index];
}

关于c++ - 下标 ("[ ] ")运算符给出奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50793961/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com