El caso es que lo más probable es que tenga que hacer el PFC usando C++ y como nunca lo había tocado me he puesto hoy a aprender el lenguaje.Estoy haciendo ejemplos chorras para ver la sintaxis del lenguaje pero me he atascado con un programa simple con herencia entre clases.
Estoy intentando crear 2 clases,una llamada Animal que represente cualquier tipo de Animal y otra llamada Perro que hereda de ella.El ejemplo es muy sencillo si meto las definiciones de ambas clases en un fichero junto con la función main que sirve de ejemplo.Sin embargo lo que quiero hacer es definir cada cosa por separado,ya que en aplicaciones grandes es lo más cómodo.Es decir,quedaría tal que así:
Animal.h - Fichero header que contiene la definición de la clase Animal y la declaración de sus métodos.
Animal.cpp - Fichero c++ que contiene la definición de los métodos de Animal.h (con un #include "./Animal.h")
Perro.h - Fichero header que contiene la definición de la clase Perro (como heredera de Animal) y la declaración de sus métodos.
Perro.cpp - Fichero c++ que contiene la definición de los métodos de Perro.
prueba_herencia.cpp - Programa de prueba que incluye a Animal.h y/o Perro.h para ver que funcionan bien.
El problema es que Animal.cpp y el programa de prueba compilan bien,pero Perro no por que creo que no hago bien el linkado de ambos ficheros ya que cuando en el constructor intento inicializar cualquier variable heredada de Animal me dice que no existe.
Los códigos fuentes son los siguientes:
Animal.h - http://pastebin.com/m11575fd9
Animal.cpp - http://pastebin.com/m7ec4eeff
Perro.h - http://pastebin.com/m620343ef
Perro.cpp - http://pastebin.com/m5609e8f8
Ejemplo - http://pastebin.com/m33f65a21
El error que me indica es el siguiente:
g++ Animal.cpp Perro.cpp prueba_herencia.cpp -o herencia
././Animal.h: In constructor ‘Perro:erro()’:
././Animal.h:9: error: ‘std::string Animal::nombre’ is private
Perro.cpp:7: error: within this context
././Animal.h: In constructor ‘Perro:erro(std::string)’:
././Animal.h:9: error: ‘std::string Animal::nombre’ is private
Perro.cpp:12: error: within this context
././Animal.h: In constructor ‘Perro:erro(std::string, std::string)’:
././Animal.h:9: error: ‘std::string Animal::nombre’ is private
Perro.cpp:17: error: within this context
prueba_herencia.cpp:11:2: warning: no newline at end of file
¿Qué estoy haciendo mal?