Ver Mensaje Individual
  #7 (permalink)  
Antiguo 29/03/2011, 10:56
Checho360
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 9 meses
Puntos: 3
Respuesta: Error en contructor de copia

Cita:
Iniciado por Heimish2000 Ver Mensaje
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
  1. #include <iostream>
  2. using namespace std;
  3. #define MAX_SIZE 10
  4.  
  5. class matrix{
  6.       public:
  7.              int size; double s[MAX_SIZE];
  8.              matrix (int n);
  9.              ~matrix() {}
  10.              int test_matrix (int a);
  11.              matrix scan_matrix (void);
  12.              matrix operator + (const matrix A);
  13.              void print_matrix (void);
  14.              matrix (const matrix& A);//<---------------Aqui esta la declaracion
  15. };
  16.  
  17. matrix::matrix(const matrix& A){ //<-------------Aqui esta la implementación
  18.        size = A.size;
  19.        for (int i=0;i<A.size;i++) s[i]=A.s[i];
  20.        }
  21.  
  22. matrix :: matrix (int n){
  23.        size = test_matrix(n);
  24.        }
  25.  
  26. int matrix :: test_matrix (int a){
  27.     if(a>MAX_SIZE){
  28.                    cerr<<"Demasiados elementos\n";
  29.                    a=MAX_SIZE;
  30.                    }
  31.     return a;
  32. }
  33.  
  34. matrix matrix :: scan_matrix (void){
  35.        for(int i=0;i<size;i++){
  36.        cout<<"Ingresa el coef "<<i<<"\n";cin>>s[i];
  37.        }
  38. }
  39.  
  40. matrix matrix :: operator + (const matrix A){
  41.      if(A.size!=size){
  42.                       cerr<<"Los vectores han de ser del mismo orden";
  43.                       }
  44.      matrix C (A.size);
  45.      for(int i=0;i<A.size;i++){
  46.             C.s[i]=s[i]+A.s[i];}
  47.      return C;
  48.      }
  49.  
  50. void matrix :: print_matrix (void){
  51.      for(int i= 0;i<size;i++){
  52.              cout<<"Suma no "<<i<<" = "<<s[i]<<"\n";
  53.              }
  54.      }
  55.  
  56. int main(){
  57.     int n;int m;
  58.     cout<<"Introduzca el orden del vector1\n";
  59.     cin>>n;
  60.     matrix A(n);
  61.     A.scan_matrix();
  62.     cout<<"Introduzca el orden del vector2\n";
  63.     cin>>m;
  64.     matrix B(m);
  65.     B.scan_matrix();
  66.    
  67.     matrix D = A + B;
  68.     matrix E(A+B);
  69.    
  70.     D.print_matrix ();
  71.     E.print_matrix ();
  72.    
  73.     system("pause");return 1;
  74. }

Me podrias escribir el codigo con tus soluciones??

Un saludo!!