[C con Clase] Problema con Constructor Copia

John Loria tanyin21 en hotmail.com
Mie Nov 11 20:24:06 CET 2009


Saludos compañeros, anteriormente habia puesto una consulta sobre el 
constructor copia en una lista, bueno ahora resulta que me puse hacer 
una "cola", pero sigo con dudas.
En el siguiente codigo, no entiendo porque me da problema, lo que trato 
de hacer es un constructor copia que reciba dos instancias de la clase 
cola y que me inserte un dato, entiendo que si uso el metodo "Insertar" 
dentro de ese constructor copia deberia de llenarme la instancia con el 
dato que estoy poniendo, lo compilo y cuando lo corro me da un error de 
"segment default".
No entiendo que es lo que pasa, estoy usando el IDE Codeblocks y el 
compilador de g++, lo que trato de hacer es llenar una nueva instancia 
con los datos de dos instancias pasadas por parámetro por medio de un 
constructor copia.

#include <iostream>

using namespace std;

class Cola{

     public:

     Cola(){ultimo=NULL; primero=NULL; tamano=0;}

     Cola(Cola& cuno,Cola& cdos){
         for(int v=0;v<=cuno.Pilatamano()-1;v++){
         Insertar(cuno.vector[v]);
         }
         for(int c=0;c<=cdos.Pilatamano()-1;c++){
         Insertar(cdos.vector[c]);
         }
         }

     void Insertar(int v);
     void Sacar();
     void Mostrar();
     int Pilatamano(){return tamano;}
     bool Pilavacia(){return primero=NULL;}
     int Primerdato(){return primero;}
     int Ultimodato(){return ultimo;}

     private:

     int vector[6];
     int primero;
     int ultimo;
     int tamano;

     };

void Cola::Insertar(int v){
     if(Pilavacia()){
         vector[Pilatamano()]=v;
         ultimo=v;
         } else {
             vector[Pilatamano()]=v;
             ultimo=v;
             }
         primero=vector[0];
         tamano++;
     }

void Cola::Sacar(){
     if(!Pilavacia()){
         for(int v=0;v<=Pilatamano()-1;v++){
             vector[v]=vector[v+1];
             }
         tamano--;
         primero=vector[0];
         ultimo=vector[Pilatamano()-1];
         }
     }

void Cola::Mostrar(){
     for(int v=0;v<=Pilatamano()-1;v++){
         cout<<vector[v]<<"-> ";
         }
     cout<<endl;
     }

int main()
{
     Cola c,x;
     c.Insertar(134);
     c.Insertar(133);
     c.Insertar(137);
     x.Insertar(40);
     x.Insertar(50);
     x.Insertar(70);
     Cola f(c,x);
     f.Mostrar();


     return 0;
}




Más información sobre la lista de distribución Cconclase