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
InformationsquelleAutor blaahhrrgg | 2011-11-02
Schreibe einen Kommentar