Cita:
Iniciado por Heimish2000 Te lo pone bien claro...
Tu, en tu constructor por copia, estás pasando la referencia a un objeto de tipo matrix (por eso el &), pero en esa linea no estás pasando la referencia, estás pasando el objeto. Lo puedes ver porque si te fijas, el operador + devuelve un matrix, no un matrix& y por eso te da error.
Soluciones: Que acepte un objeto y no su referencia o pasarle al constructor una referencia y no un objeto.
Lo consegui añadiendo un const al constructor copia y funciona:
Código C++:
Ver original#include <iostream>
using namespace std;
#define MAX_SIZE 10
class matrix{
public:
int size; double s[MAX_SIZE];
matrix (int n);
~matrix() {}
int test_matrix (int a);
matrix scan_matrix (void);
matrix operator + (const matrix A);
void print_matrix (void);
matrix (const matrix& A);//<---------------Aqui esta la declaracion
};
matrix::matrix(const matrix& A){ //<-------------Aqui esta la implementación
size = A.size;
for (int i=0;i<A.size;i++) s[i]=A.s[i];
}
matrix :: matrix (int n){
size = test_matrix(n);
}
int matrix :: test_matrix (int a){
if(a>MAX_SIZE){
cerr<<"Demasiados elementos\n";
a=MAX_SIZE;
}
return a;
}
matrix matrix :: scan_matrix (void){
for(int i=0;i<size;i++){
cout<<"Ingresa el coef "<<i<<"\n";cin>>s[i];
}
}
matrix matrix :: operator + (const matrix A){
if(A.size!=size){
cerr<<"Los vectores han de ser del mismo orden";
}
matrix C (A.size);
for(int i=0;i<A.size;i++){
C.s[i]=s[i]+A.s[i];}
return C;
}
void matrix :: print_matrix (void){
for(int i= 0;i<size;i++){
cout<<"Suma no "<<i<<" = "<<s[i]<<"\n";
}
}
int main(){
int n;int m;
cout<<"Introduzca el orden del vector1\n";
cin>>n;
matrix A(n);
A.scan_matrix();
cout<<"Introduzca el orden del vector2\n";
cin>>m;
matrix B(m);
B.scan_matrix();
matrix D = A + B;
matrix E(A+B);
D.print_matrix ();
E.print_matrix ();
}
Me podrias escribir el codigo con tus soluciones??
Un saludo!!