Fehler: "lvalue required as left operand of assignment"
Ich bin sehr viel immer noch ein Anfänger im Programmieren aber ich habe mich auch über die Fehlermeldung "lvalue required as left operand of assignment" und ich bin nicht sicher, wie dieses Problem zu beheben, nachdem wir uns durch diverse andere Diskussionen. Der Fehler wird in einer Klasse, die ich für Matrizen, wenn ich bestimmte Operatoren überladen. Hier ist der Teil des Codes,
#ifndef MATRIX_H
#define MATRIX_H
#include <iostream>
#include "MVector.h"
class Matrix {
private:
vector<double> columns;
vector<vector<double> > A;
public:
//constructor
explicit Matrix(){};
explicit Matrix(int n,int m):columns(m),A(n,columns){};
explicit Matrix(int n,int m,double x):columns(m,x),A(n,columns){};
//destructor
~Matrix(){};
//equate matrices
Matrix &operator=(const Matrix &rhs) {A=rhs.A;return *this;};
//set all values to a double
Matrix &operator=(double x)
{
int rows=this->rows();
int cols=this->cols();
for (int i=0;i<rows;i++)
{
for (int j=0;j<cols;j++)
{
A[i][j]=x;
}
}
}
//access data in matrix (const)
double operator()(int i,int j) const {return A[i][j];};
//access data in matrix
double operator()(int i,int j) {return A[i][j];};
//returns the number of rows
int rows() const {return A.size();};
//returns the number of cols
int cols() const {return columns.size();};
//check if square matrix or not
bool check_if_square() const
{
if (rows()==cols()) return true;
else return false;
}
};
und dies ist einer der überladenen Operatoren, die den Fehler erzeugt
const Matrix operator+(const Matrix &A,const Matrix &B)
{
//addition of matrices
//check dimensions
if (!(A.cols()==B.cols()) || !(A.rows()==B.rows()))
{
cout << "Error: Dimensions are different \n Ref: Addition of Matrices";
throw;
}
else
{
int dim_rows = A.rows();
int dim_cols = B.cols();
Matrix temp_matrix(dim_rows,dim_cols);
for (int i=0;i<dim_rows;i++)
{
for (int j=0;j<dim_cols;j++)
{
temp_matrix(i,j)=A(i,j) + B(i,j);
}
}
return temp_matrix;
}
}
Ich nehme an ich habe etwas falsch gemacht, wer kann helfen und erklären, was ich falsch mache, wäre echt dankbar. Vielen Dank für die Hilfe!
- Ich glaube, Sie werfen etwas in deinem error-handler-block.
throw;
ist nur gültig in einem catch-block, d.h. mit einem anhängigen Ausnahme und würde wahrscheinlich dazu führen, terminate() aufgerufen, sofort
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bedeutet, dass Sie nicht zuordnen das Ergebnis einer rvalue-Ausdruck, in diesem Fall die temporäre zurückgegeben
operator()(int,int)
. Wahrscheinlich möchten Sie Sie ändern, um Ihre non-constoperator()(int,int)
in der Matrix-Klasse zu werden:Zusätzlich (und unabhängig von der Frage) möchten Sie vielleicht vereinfachen Sie Ihre matrix-Klasse und speichern nur die Abmessungen und einem einzigen eindimensionalen vector zum speichern aller Elemente. Dann den Zugriffs-würde Sie einige grundlegende Arithmetik (so etwas wie
row*columns()+column
), um auf den tatsächlichen Wert in der eindimensionalen Vektor.