gpt4 book ai didi

c++ - 在矩阵类中重载 []

转载 作者:行者123 更新时间:2023-11-30 02:36:19 27 4
gpt4 key购买 nike

我正在尝试重载运算符 [],以便我可以直接访问矩阵而不是使用数组。

我做了什么:

.h:

#include <array>
#include "vector.h"
using namespace std;
struct Matrix2d{
array<float,4> positions;

//Constructors
Matrix2d(float x11, float x12, float x21, float x22);

float operator[](int index);
....

.c:

float Matrix2d::operator[](int index){
return this->positions[index];
}
Matrix2d operator+(Matrix2d& mat1, Matrix2d& mat2){
Matrix2d aux(0, 0, 0, 0);
aux[0] = mat1[0] + mat2[0];
aux[1] = mat1[1] + mat2[1];
aux[2] = mat1[2] + mat2[2];
aux[3] = mat1[3] + mat2[3];
return aux;

发生的事情是 aux[i] 给出了一个错误“必须是一个可修改的左值”,但是如果我做 aux.positions[i] 它会起作用。

我看过this供引用,它有效,所以我不明白为什么我的版本不起作用...

最佳答案

救援引用

您需要从 operator[] 返回对容器内元素的引用,以便能够从外部修改该给定元素。

目前您正在返回所需元素的临时拷贝,如您的问题所述,该拷贝不允许进行此类修改,但是当您只想读取值时它非常好(因为在这种情况下你不关心复制)。


提议的决议

修复就像将 & 附加到所述运算符的返回类型一样简单,但请注意,您可能应该添加相同函数的常量重载(以便您可以访问Matrix2d 的元素在逻辑上是 const

struct Matrix2d {
...

float& operator[](int index);

// float const& operator[] (int index) const
// ^- you probably also want this

...
};
float& Matrix2d::operator[](int index){
return this->positions[index];
}

关于c++ - 在矩阵类中重载 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934192/

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