Vector
En la clase tablero, presentada a continuación, tengo la función bool Tablero::ponerficha(Ficha ficha); la cual debo implementar para que guarde en el vector fichas 9 jugadas, de las cuales cada una es el objeto ficha, definido asi: Ficha(int fila, int columna, bool esblanco).
Quiero hacer esto con un switch, el cual de acuerdo al valor de la columna y fila me debe guardar el objeto en la respectiva posición. Estoy intendo hacerlo como lo muestro a continuación pero me da un error de memoria. Como debo hacerlo?
Gracias por la colaboración.
#ifndef _CLASSTABLERO
#define _CLASSTABLERO
#include <iostream>
#include <Vector>
#include "ficha.h"
class Tablero
{
private :
std::vector<Ficha> fichas;
const int lado;
public:
Tablero();
~Tablero();
bool ponerficha(Ficha ficha);
bool hayfichaen(int col, int fil, bool colorblanco);
void imprimir(ostream &flujo);
bool haytresenraya(bool decolorblanco);
bool estalleno();
};
#endif
#include "tablero.h"
#include <vector>
using std::vector;
using std::string;
Tablero::Tablero():lado(3)
{
}
bool Tablero::ponerficha(Ficha ficha)
{
int colum=ficha.enquecolumnaesta();
switch(colum)
{
case 0:
fichas[0]=ficha;
return true;
case 1:
fichas[1]=ficha;
return true;
case 2:
fichas[1]=ficha;
return true;
default:
return false;
}
}
Quiero hacer esto con un switch, el cual de acuerdo al valor de la columna y fila me debe guardar el objeto en la respectiva posición. Estoy intendo hacerlo como lo muestro a continuación pero me da un error de memoria. Como debo hacerlo?
Gracias por la colaboración.
#ifndef _CLASSTABLERO
#define _CLASSTABLERO
#include <iostream>
#include <Vector>
#include "ficha.h"
class Tablero
{
private :
std::vector<Ficha> fichas;
const int lado;
public:
Tablero();
~Tablero();
bool ponerficha(Ficha ficha);
bool hayfichaen(int col, int fil, bool colorblanco);
void imprimir(ostream &flujo);
bool haytresenraya(bool decolorblanco);
bool estalleno();
};
#endif
#include "tablero.h"
#include <vector>
using std::vector;
using std::string;
Tablero::Tablero():lado(3)
{
}
bool Tablero::ponerficha(Ficha ficha)
{
int colum=ficha.enquecolumnaesta();
switch(colum)
{
case 0:
fichas[0]=ficha;
return true;
case 1:
fichas[1]=ficha;
return true;
case 2:
fichas[1]=ficha;
return true;
default:
return false;
}
}
Romulo has olvidado poner el error, que es muy importante. Tampoco sé que haces en el constructor lado, pero creo que sé cual es tu error.
Al insertar una ficha en el vector mediante el operator[] no se no se ubica memoria para el mismo, sabes que dispones del metodo, vector.push_back().
Yo lo que haría sería esto:
1. El en constructor del tablero llamaría a
push_back() tantas veces como posiciones tenga
el tablero, insertando algun valor que me indique que esa posición está vacía de esta manera se ubicará cada celda del tablero en memoria.
2. Una vez esto puedes realizar la asignación con el opertator[] sin problemas.
suerte good code
Al insertar una ficha en el vector mediante el operator[] no se no se ubica memoria para el mismo, sabes que dispones del metodo, vector.push_back().
Yo lo que haría sería esto:
1. El en constructor del tablero llamaría a
push_back() tantas veces como posiciones tenga
el tablero, insertando algun valor que me indique que esa posición está vacía de esta manera se ubicará cada celda del tablero en memoria.
2. Una vez esto puedes realizar la asignación con el opertator[] sin problemas.
suerte good code
