M
Miembro eliminado 62353
Guest
Buenas tardes, estoy realizando el juego de pong para la 3ds y he decidido usar c++. Decir que yo POO la conozco, porque la he trabajado en java y al pasar a c++ hay cosas que no se por que fallan o no se si estan bien.
Para empezar, realicé el diagrama de clases uml que adjunto a continuación y a partir de ahi empecé a construir las clases.
Imagen UML
Para el problema que se me presenta, adjunto solo una clase para que se vea como he seguido a partir del uml. En concreto adjunto el archivo Game.hpp
Bien, cual es el problema? El problema es el siguiente, he creado este pequeño main a modo de testeo conjunto, teniendo en cuenta las relaciones del diagrama, para ver a que objetos se le pasa un determinado atributo en el constructor y a que otros se le setea despues.
Como se puede ver, en una determinada línea falla el seteo (segfault), cosa curiosa ya que en las lineas superiores hago otros seteos como por ejemplo cuando a p1 le seteo el scoreboard y ahi no falla.
Para la implementación de todos los setters, lo he hecho de la siguiente manera:
Puede que el fallo esté en en constructor y que se inicialize mal o algo? Adjunto el constructor de la clase game
A ver si me podeis echar un cable y entre todos lo sacamos
Un saludo y gracias
PD: He decidido adjuntar un enlace a github por si alguien quiere tener todo el código. Enlace
Para empezar, realicé el diagrama de clases uml que adjunto a continuación y a partir de ahi empecé a construir las clases.
Imagen UML
Para el problema que se me presenta, adjunto solo una clase para que se vea como he seguido a partir del uml. En concreto adjunto el archivo Game.hpp
C++:
#pragma once
class Board;
class Player;
#include <string>
#include <vector>
#include "../include/Board.hpp"
#include "../include/Player.hpp"
class Game
{
public:
Game();
Game(std::string name, Board &board, int16_t totalTime);
Game(std::string name, Board &board, Player &p1, Player &p2, int16_t totalTime);
std::string getName() const;
Board *getBoard() const;
std::vector<Player> getPlayers() const;
void setP1(Player &p1);
void setP2(Player &p2);
int16_t getTotalTime() const;
void end();
void printInfo();
void *start();
std::string toString();
bool operator==(const Game &g) const;
bool operator!=(const Game &g) const;
private:
std::string name;
Board *board;
Player *p1, *p2; // Referencia en vez de objeto porque es un tipo incompleto para esta clase
int16_t totalTime;
};
Bien, cual es el problema? El problema es el siguiente, he creado este pequeño main a modo de testeo conjunto, teniendo en cuenta las relaciones del diagrama, para ver a que objetos se le pasa un determinado atributo en el constructor y a que otros se le setea despues.
C++:
#include "../include/mpong.hpp"
//TODO: Implement destructors, create makefile
int main()
{
// Example of main
Player p1 = Player("Pepe"), p2 = Player("Joan");
Scoreboard s = Scoreboard(p1, p2);
p1.setScoreboard(s);
p2.setScoreboard(s);
Ball b = Ball(3.0f, 4.0f);
Board board = Board(400, 500, p1, p2, b, s);
b.setBoard(board);
p1.setBoard(board);
p2.setBoard(board);
Game g1 = Game("AAA", board, p1, p2, 200);
Game g2 = Game("AAA", board, 200);
g2.setP1(p1); /*Error here*/
g2.setP2(p2);
p1.printInfo(); // Player
s.printInfo(); // Scoreboard
b.printInfo(); // Ball
board.printInfo(); // Board
g1.printInfo();
g2.printInfo(); // Game
return 0;
}
Para la implementación de todos los setters, lo he hecho de la siguiente manera:
C++:
void setter(T toSet) {
this->toSet = toSet; // Implementacion generica para no poner todos los setters
}
C++:
Game::Game(std::string name, Board &board, int16_t totalTime) : board(&board)
{
this->name = name;
*this->board = board;
this->totalTime = totalTime;
}
Un saludo y gracias
PD: He decidido adjuntar un enlace a github por si alguien quiere tener todo el código. Enlace