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#ifndef VIDA_H_INCLUDED
#define VIDA_H_INCLUDED
#include <iostream>
#define FILAS 10
#define COLUMNAS 10
#define VIDA '*'
#define MUERTE ' '
#define UMBRAL_INANICION 2
#define UMBRAL_SUPERPOBLACION 3
enum eDir{
ARR_IZQ=0,
ARR=1,
ARR_DER=2,
DER=3,
DER_ABJ=4,
ABJ=5,
ABJ_IZQ=6,
IZQ=7
};
class Vida{
//Mapa
char m_mapa[FILAS][COLUMNAS];
// Cuenta la cantidad de vidas adyacentes a la posición pasada como parámetro
int contarAdyacentes(int fila, int columna);
//Lee el valor de una posición según lo que indican los parámetros
int leerValor(int fila, int columna, eDir dir);
//Indica si la posición es válida o no
bool posValida(int fila, int columna);
public:
Vida();
void Generar();
void Mostrar();
};
#endif // VIDA_H_INCLUDED
El vida.cpp donde inicializo funciones es:
Código C++:
Ver original#include "vida.h"
#include <memory.h>
Vida::Vida;
Vida::Vida(){
//Limpiar
for(int i=0; i<FILAS;i++){
for(int j=0; j<COLUMNAS;j++)
m_mapa[i][j] = ' ';
}
//Se pone valores en el mapa
m_mapa[3][2]= '*';
m_mapa[3][4]= '*';
m_mapa[2][3]= '*';
m_mapa[4][3]= '*';
m_mapa[2][2]= '*';
m_mapa[4][4]= '*';
m_mapa[2][4]= '*';
m_mapa[4][2]= '*';
//REGLAS
Vida::Generar;
void Vida::Generar(){
int iConteo;
char mapa[FILAS][COLUMNAS];
memcpy(mapa
, m_mapa
, sizeof(m_mapa
)); for(int i=0; i<FILAS; i++){
for(int j=0; j<COLUMNAS; j++){
iConteo = contarAdyacentes(i,j);
// Cuando el numero es igual al umbral de inanicion no pasa nothing
if(iConteo == UMBRAL_INANICION){
mapa[i][j] == MUERTE;
}
else if(iConteo > UMBRAL_INANICION && iConteo <= UMBRAL_SUPERPOBLACION){
mapa[i][j] = VIDA;
}
else if(iConteo > UMBRAL_SUPERPOBLACION){
mapa[i][j] = MUERTE;
}
}//FOR
memcpy(m_mapa
, mapa
, sizeof(mapa
)) }//FOR
}// Generar
Vida::contarAdyacentes
//Cuenta la cantidad de vidas adyacentes
int Vida::contarAdyacentes(int fila, int columna){
return (leerValor(fila, columna, ARR_IZQ) + leerValor(fila, columna, ARR) + leerValor(fila, columna, ARR_DER) +
leerValor(fila, columna, DER) + leerValor(fila, columna, DER_ABJ) + leerValor(fila, columna, ABJ) +
leerValor(fila, columna, ABJ_IZQ) + leerValor(fila, columna, IZQ));
}
Vida::leerValor;
int Vida::leerValor(int fila, int columna, eDir dir)
{
if(dir == ARR_IZQ && posValida(fila-1,columna-1)){
return ((m_mapa[fila-1][columna-1] == VIDA)? 1:0);
}
else if(dir == ARR && posValida(fila-1, columna)){
return ((m_mapa[fila-1][columna] == VIDA)? 1:0);
}
else if(dir == ARR_DER && posValida(fila-1, columna+1)){
return ((m_mapa[fila-1][columna+1] == VIDA)? 1:0);
}
else if(dir == DER && posValida(fila, columna+1)){
return ((m_mapa[fila][columna+1] == VIDA)? 1:0);
}
else if(dir == DER_ABJ && posValida(fila+1, columna+1)){
return ((m_mapa[fila+1][columna+1] == VIDA)? 1:0);
}
else if(dir == ABJ && posValida(fila+1, columna)){
return ((m_mapa[fila+1][columna] == VIDA)? 1:0);
}
else if(dir == ABJ_IZQ && posValida(fila+1, columna-1)){
return ((m_mapa[fila+1][columna-1] == VIDA)? 1:0);
}
else if(dir == IZQ && posValida(fila, columna-1)){
return ((m_mapa[fila][columna-1] == VIDA)? 1:0);
}
else{
return 0;
}
}//Leer Valor
Vida::posValida;
bool Vida::posValida(int fila, int columna){
return(fila >= 0 && fila < FILAS && columna >= 0 && columna < COLUMNAS);
}
Vida::Mostrar;
void Vida::Mostrar(){
for(int i = 0;i < FILAS;i++){
for(int j = 0; j < COLUMNAS; j++)
cout << m_mapa[i][j];
cout << endl;
}
}//MOSTRAR
}//VIDA!!!!!!
Y el main.cpp es:
Código C++:
Ver original#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include "vida.h"
#include "vida.cpp"
using namespace std;
int main(){
Vida vida1;
vida1.Mostrar();
for(int i = 0; i<100;i++){
sleep(100);
vida1.Generar();
vida1.Mostrar();
}
return 0;
}
Agradecería sus colaboraciones de antemano y que tengan una excelente jornada.
PD: Uso CodeBlocks