Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con compilado de "El juego de la vida"

Estas en el tema de Problema con compilado de "El juego de la vida" en el foro de C/C++ en Foros del Web. Buenas chicos/as, espero que estén bien, les comento; estoy haciendo el famoso "juego de la vida" y me topé con los siguientes errores en la ...
  #1 (permalink)  
Antiguo 16/07/2017, 03:18
 
Fecha de Ingreso: marzo-2016
Mensajes: 15
Antigüedad: 1 año, 5 meses
Puntos: 0
Exclamación Problema con compilado de "El juego de la vida"

Buenas chicos/as, espero que estén bien, les comento; estoy haciendo el famoso "juego de la vida" y me topé con los siguientes errores en la compilación y llevo horas sin saber qué es, no encuentro la llave no cerrada y cosas varias. Los errores son los siguientes:

C:\Users\***\Desktop\Programación C++\practicas\practicas\vida.cpp|4|error: 'Vida::Vida' nombra el constructor, no el tipo|

C:\Users\***\Desktop\Programación C++\practicas\practicas\vida.cpp|27|error: la declaración no puede resolver la dirección de la función sobrecargada|

C:\Users\***\Desktop\Programación C++\practicas\practicas\vida.cpp|28|error: qualified-id in declaration before '(' token|

C:\Users\***\Desktop\Programación C++\practicas\practicas\main.cpp|22|error: expected '}' at end of input|


El header es vida.h :

Código C++:
Ver original
  1. #ifndef VIDA_H_INCLUDED
  2. #define VIDA_H_INCLUDED
  3.  
  4. #include <iostream>
  5.  
  6. #define FILAS 10
  7. #define COLUMNAS 10
  8.  
  9. #define VIDA '*'
  10. #define MUERTE ' '
  11.  
  12. #define UMBRAL_INANICION 2
  13. #define UMBRAL_SUPERPOBLACION 3
  14.  
  15. enum eDir{
  16.     ARR_IZQ=0,
  17.     ARR=1,
  18.     ARR_DER=2,
  19.     DER=3,
  20.     DER_ABJ=4,
  21.     ABJ=5,
  22.     ABJ_IZQ=6,
  23.     IZQ=7
  24. };
  25.  
  26. class Vida{
  27.  
  28.     //Mapa
  29.     char m_mapa[FILAS][COLUMNAS];
  30.  
  31.     // Cuenta la cantidad de vidas adyacentes a la posición pasada como parámetro
  32.     int contarAdyacentes(int fila, int columna);
  33.     //Lee el valor de una posición según lo que indican los parámetros
  34.     int leerValor(int fila, int columna, eDir dir);
  35.     //Indica si la posición es válida o no
  36.     bool posValida(int fila, int columna);
  37.  
  38. public:
  39.     Vida();
  40.     void Generar();
  41.     void Mostrar();
  42. };
  43.  
  44. #endif // VIDA_H_INCLUDED

El vida.cpp donde inicializo funciones es:
Código C++:
Ver original
  1. #include "vida.h"
  2. #include <memory.h>
  3.  
  4. Vida::Vida;
  5.  
  6. Vida::Vida(){
  7.     //Limpiar
  8.     for(int i=0; i<FILAS;i++){
  9.         for(int j=0; j<COLUMNAS;j++)
  10.             m_mapa[i][j] = ' ';
  11.     }
  12.  
  13.     //Se pone valores en el mapa
  14.  
  15.     m_mapa[3][2]= '*';
  16.     m_mapa[3][4]= '*';
  17.     m_mapa[2][3]= '*';
  18.     m_mapa[4][3]= '*';
  19.     m_mapa[2][2]= '*';
  20.     m_mapa[4][4]= '*';
  21.     m_mapa[2][4]= '*';
  22.     m_mapa[4][2]= '*';
  23.  
  24.  
  25.  
  26.     //REGLAS
  27.     Vida::Generar;
  28.     void Vida::Generar(){
  29.     int iConteo;
  30.  
  31.     char mapa[FILAS][COLUMNAS];
  32.  
  33.     memcpy(mapa, m_mapa, sizeof(m_mapa));
  34.     for(int i=0; i<FILAS; i++){
  35.         for(int j=0; j<COLUMNAS; j++){
  36.             iConteo = contarAdyacentes(i,j);
  37.  
  38.             // Cuando el numero es igual al umbral de inanicion no pasa nothing
  39.             if(iConteo == UMBRAL_INANICION){
  40.                 mapa[i][j] == MUERTE;
  41.             }
  42.             else if(iConteo > UMBRAL_INANICION && iConteo <= UMBRAL_SUPERPOBLACION){
  43.                 mapa[i][j] = VIDA;
  44.             }
  45.             else if(iConteo > UMBRAL_SUPERPOBLACION){
  46.                 mapa[i][j] = MUERTE;
  47.             }
  48.         }//FOR
  49.         memcpy(m_mapa, mapa, sizeof(mapa))
  50.     }//FOR
  51.     }// Generar
  52.  
  53.     Vida::contarAdyacentes
  54.     //Cuenta la cantidad de vidas adyacentes
  55.     int Vida::contarAdyacentes(int fila, int columna){
  56.     return (leerValor(fila, columna, ARR_IZQ) + leerValor(fila, columna, ARR) + leerValor(fila, columna, ARR_DER) +
  57.             leerValor(fila, columna, DER) + leerValor(fila, columna, DER_ABJ) + leerValor(fila, columna, ABJ) +
  58.             leerValor(fila, columna, ABJ_IZQ) + leerValor(fila, columna, IZQ));
  59.     }
  60.  
  61.     Vida::leerValor;
  62.  
  63.     int Vida::leerValor(int fila, int columna, eDir dir)
  64.     {
  65.  
  66.     if(dir == ARR_IZQ && posValida(fila-1,columna-1)){
  67.         return ((m_mapa[fila-1][columna-1] == VIDA)? 1:0);
  68.     }
  69.     else if(dir == ARR && posValida(fila-1, columna)){
  70.         return ((m_mapa[fila-1][columna] == VIDA)? 1:0);
  71.     }
  72.     else if(dir == ARR_DER && posValida(fila-1, columna+1)){
  73.         return ((m_mapa[fila-1][columna+1] == VIDA)? 1:0);
  74.     }
  75.     else if(dir == DER && posValida(fila, columna+1)){
  76.         return ((m_mapa[fila][columna+1] == VIDA)? 1:0);
  77.     }
  78.     else if(dir == DER_ABJ && posValida(fila+1, columna+1)){
  79.         return ((m_mapa[fila+1][columna+1] == VIDA)? 1:0);
  80.     }
  81.     else if(dir == ABJ && posValida(fila+1, columna)){
  82.         return ((m_mapa[fila+1][columna] == VIDA)? 1:0);
  83.     }
  84.     else if(dir == ABJ_IZQ && posValida(fila+1, columna-1)){
  85.         return ((m_mapa[fila+1][columna-1] == VIDA)? 1:0);
  86.     }
  87.     else if(dir == IZQ && posValida(fila, columna-1)){
  88.         return ((m_mapa[fila][columna-1] == VIDA)? 1:0);
  89.     }
  90.     else{
  91.         return 0;
  92.     }
  93.  
  94.     }//Leer Valor
  95.  
  96.     Vida::posValida;
  97.  
  98.     bool Vida::posValida(int fila, int columna){
  99.         return(fila >= 0 && fila < FILAS && columna >= 0 && columna < COLUMNAS);
  100.     }
  101.  
  102.     Vida::Mostrar;
  103.  
  104.     void Vida::Mostrar(){
  105.  
  106.     for(int i = 0;i < FILAS;i++){
  107.         for(int j = 0; j < COLUMNAS; j++)
  108.             cout << m_mapa[i][j];
  109.  
  110.         cout << endl;
  111.     }
  112.  
  113.     }//MOSTRAR
  114.  
  115.     }//VIDA!!!!!!

Y el main.cpp es:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include "vida.h"
  5. #include "vida.cpp"
  6.  
  7. using namespace std;
  8. int main(){
  9.  
  10.     Vida vida1;
  11.  
  12.     vida1.Mostrar();
  13.  
  14.     for(int i = 0; i<100;i++){
  15.         sleep(100);
  16.         vida1.Generar();
  17.         system("cls");
  18.         vida1.Mostrar();
  19.         }
  20.     return 0;
  21.  
  22. }


Agradecería sus colaboraciones de antemano y que tengan una excelente jornada.

PD: Uso CodeBlocks

Última edición por alanjo; 16/07/2017 a las 03:23
  #2 (permalink)  
Antiguo 16/07/2017, 04:29
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 133
Antigüedad: 8 años
Puntos: 11
Respuesta: Problema con compilado de "El juego de la vida"

Hola

Tienes un pequeño lío al implementar los métodos de la clase Vida. Te pongo un trozo de tu código:

Código C++:
Ver original
  1. Vida::Vida; // esto sobra, ya tienes la implementación abajo
  2.  
  3. Vida::Vida(){
  4.     //Limpiar
  5.     for(int i=0; i<FILAS;i++){
  6.         for(int j=0; j<COLUMNAS;j++)
  7.             m_mapa[i][j] = ' ';
  8.     }
  9.  
  10.     //Se pone valores en el mapa
  11.  
  12.     m_mapa[3][2]= '*';
  13.     m_mapa[3][4]= '*';
  14.     m_mapa[2][3]= '*';
  15.     m_mapa[4][3]= '*';
  16.     m_mapa[2][2]= '*';
  17.     m_mapa[4][4]= '*';
  18.     m_mapa[2][4]= '*';
  19.     m_mapa[4][2]= '*';
  20.  
  21. } // falta la llave de cierre del constructor
  22.  // has metido todos los métodos dentro del constructor
  23.  
  24.     //REGLAS
  25.  
  26.     Vida::Generar; // esto sobra igual
  27.  
  28.     void Vida::Generar(){
  29. // código de generar....
  30. }

El problema es que has metido la implementación de todos los métodos dentro de la implementación del constructor.

Un saludo
  #3 (permalink)  
Antiguo 16/07/2017, 13:31
 
Fecha de Ingreso: marzo-2016
Mensajes: 15
Antigüedad: 1 año, 5 meses
Puntos: 0
Respuesta: Problema con compilado de "El juego de la vida"

Cita:
Iniciado por jc_moj Ver Mensaje
Hola

Tienes un pequeño lío al implementar los métodos de la clase Vida. Te pongo un trozo de tu código:

Código C++:
Ver original
  1. Vida::Vida; // esto sobra, ya tienes la implementación abajo
  2.  
  3. Vida::Vida(){
  4.     //Limpiar
  5.     for(int i=0; i<FILAS;i++){
  6.         for(int j=0; j<COLUMNAS;j++)
  7.             m_mapa[i][j] = ' ';
  8.     }
  9.  
  10.     //Se pone valores en el mapa
  11.  
  12.     m_mapa[3][2]= '*';
  13.     m_mapa[3][4]= '*';
  14.     m_mapa[2][3]= '*';
  15.     m_mapa[4][3]= '*';
  16.     m_mapa[2][2]= '*';
  17.     m_mapa[4][4]= '*';
  18.     m_mapa[2][4]= '*';
  19.     m_mapa[4][2]= '*';
  20.  
  21. } // falta la llave de cierre del constructor
  22.  // has metido todos los métodos dentro del constructor
  23.  
  24.     //REGLAS
  25.  
  26.     Vida::Generar; // esto sobra igual
  27.  
  28.     void Vida::Generar(){
  29. // código de generar....
  30. }

El problema es que has metido la implementación de todos los métodos dentro de la implementación del constructor.

Un saludo

Muchísimas gracias por la respuesta, no me había dado cuenta, un error bastante tonto de mi parte. Creí que era necesario Vida::Vida por el tema de contenido basura. Muchas gracias, que tengas una excelente jornada.



La zona horaria es GMT -6. Ahora son las 13:52.