Problema con herencia de constructores

Iniciado por Lord_Lobotomi, 29 Febrero 2012, 17:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Lord_Lobotomi

Buenas, espero alguien pueda ayudarme con el siguiente problema, en clases me mandaron un problema de herencia y he tratado de hacerlo de la siguiente forma:

#include<iostream>
#include<string.h>

using namespace std;

class mamifero
{
    protected:
    char* dieta;
    int age;
    char* nacimiento;

    public:
    mamifero(){};
    mamifero(char*, int, char*);
    void alimento();

};

class felino : public mamifero
{
    protected:
    char* raza;
    char* circo;

    public:
    felino(){};
    felino(char* comida, int año, char* lugar, char* raz, char* circ):mamifero(comida, año, lugar);

    void nombrecirco();
    void nuevaestrella();
};

class gatodomestico : public felino
{
    protected:
    char* duenio;

    public:
    gatodomestico(){};
    gatodomestico(char*);

//    void nuevominino();
};

mamifero::mamifero(char* comida, int año, char* lugar)
{
    dieta = new char[strlen(comida)];
    age = año;
    nacimiento = new char[strlen(lugar)];

    dieta = comida;
    nacimiento = lugar;
}

felino::felino(char* comida, int año, char* lugar, char* raz, char* circ):mamifero( comida, año, lugar)
{
    raza = new char[strlen(raz)];
    circo = new char[strlen(circ)];

    raza = raz;
    circo = circ;
}

gatodomestico::gatodomestico(char* x)
{
    duenio = new char[strlen(x)];
}

void mamifero::alimento()
{
    cout<<"La dieta es leche";
}

main()
{
    bool flag = true;
    int opc;

    gatodomestico minino;
    felino estrelladecirco;

    while(flag == true)
    {
        cout<<"que desea hacer?\n";
        cout<<"1. Ingresar datos del minino y estrella de circo\n";
        cout<<"2. Imprimir la dieta del minino y estrella de circo\n";
        cout<<"3. Imprimir el año y el lugar de nacimiento\n";
        cout<<"4. Cambiar el nombre del dueño del minino\n";
        cout<<"5. Cambiar el nombre del circo de la estrella de circo";
        cout<<"6. Imprimir raza";

        cin>>opc;

        switch(opc)
        {
            case 1:
//            minino.nuevominino();
            ;

        }

    }

}

Los errores que me salen son los siguientes:

|28|error: expected '{' at end of input|
|56|error: redefinición de 'felino::felino(char*, int, char*, char*, char*)'|
|28|error: se define 'felino::felino(char*, int, char*, char*, char*)' previamente aquí|
||=== Build finished: 3 errors, 0 warnings ===|

Al parecer no me funcionan los constructores con la herencia simple... alguien me podria decir cual es la manera correcta de hacerlo?

naderST

Mira ahí tienes errores de C...

1. Cuando reservas memoria te estás olvidando del espacio para el carácter nulo '\0'.
2. No puedes simplemente asignar una cadena en C, debes usar la función strcpy o strncpy de la librería estándar string.h.
3. Te da el error de redefinition porque estás definiendo dos veces el constructor de la clase felino...

Código (cpp) [Seleccionar]
felino(){};
felino::felino(char* comida, int año, char* lugar, char* raz, char* circ):mamifero( comida, año, lugar)
{
    raza = new char[strlen(raz)];
    circo = new char[strlen(circ)];

    raza = raz;
    circo = circ;
}


armizh

Primero que todo, por favor usar las etiquetas GeSHi, para algo esta (y no, no es de bonito).
Segundo...
Cita de: naderST en 29 Febrero 2012, 17:42 PM
Mira ahí tienes errores de C...

1. Cuando reservas memoria te estás olvidando del espacio para el carácter nulo '\0'.
2. No puedes simplemente asignar una cadena en C, debes usar la función strcpy o strncpy de la librería estándar string.h.
3. Te da el error de redefinition porque estás definiendo dos veces el constructor de la clase felino...

Código (cpp) [Seleccionar]
felino(){};
felino::felino(char* comida, int año, char* lugar, char* raz, char* circ):mamifero( comida, año, lugar)
{
    raza = new char[strlen(raz)];
    circo = new char[strlen(circ)];

    raza = raz;
    circo = circ;
}


Esto es C++, no C. Pero es cierto en cierto sentido, varias veces redefine el constructor pero con diferentes argumentos.
Código (cpp) [Seleccionar]
class felino : public mamifero
{
    protected:
    char* raza;
    char* circo;

    public:
    //felino(){}; Elimina Esto!
    felino(char* comida, int año, char* lugar, char* raz, char* circ)//:mamifero(comida, año, lugar); esto va despues, cuando escribes el codigo del constructor

    void nombrecirco();
    void nuevaestrella();
};

Hay muchisimos errores, lo unico que puedo recomendarte es que uses cabeceras y archivos fuente... osino te pierdes como en este caso, la verdad es que nose como es que puedes programar asi.

Saludos
Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código (sh) [Seleccionar]
git clone https://github.com/armizh/Hamster

naderST

@armizh Me refiero a que está programando en C++ y está cometiendo errores ELEMENTALES de C. El problema aquí no es principalmente de herencia de constructores es de C.