• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Proyecto POO en C++

  • Autor Miembro eliminado 62353
  • Fecha de inicio
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

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;

}
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:
C++:
void setter(T toSet) {
    this->toSet = toSet; // Implementacion generica para no poner todos los setters
}
Puede que el fallo esté en en constructor y que se inicialize mal o algo? Adjunto el constructor de la clase game
C++:
Game::Game(std::string name, Board &board, int16_t totalTime) : board(&board)
{
    this->name = name;
    *this->board = board;
    this->totalTime = totalTime;
}
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
 
Un poquillo tarde quizás, pero bueno, como consejo, aunque supongo que ya no sirvirá de mucho, puede que tengas más ayuda en StackOverflow. Es un sitio Web más enfocado a resolver este tipo de preguntas.

Suerte!
 
Arriba