Я получаю странное поведение от Visual Studio, касающееся следующего фрагмента кода. Список ошибок показывает несколько экземпляров E0349: ни один оператор "[]" не соответствует этим операндам.
Кажется, что Intellisense подразумевает несоответствие типов, но, как вы увидите в коде, несоответствия типов нет.
Для начала я определил структуру Vec4 для целей созданияmat4: (я только включил соответствующие функции)
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", как предложено в ответе на другой вопрос, но безрезультатно.Я был бы признателен, если бы мне это объяснили.