Soy nuevo en c ++ y quiero sumar dos objetos gracias a la sobrecarga del operador, pero el problema es que mi programa se bloquea durante la ejecución del programa y no sé dónde puede estar el problema que tengo que solucionar para poder compila bien mi código.

Principal

#include <iostream>
#include <string>
#include "Personnage.h"

int main()
{
    Personnage rony(32), marc(20);
    Personnage resultat;

    resultat = rony + marc;


    system("PAUSE");
    return 0;
}

Personnage.h

class Personnage
{
public:
    Personnage();
    Personnage(int force);
private:
    int power;
};
Personnage operator+(Personnage const& first, Personnage const& second);

Personnage.cpp

#include "Personnage.h"
#include <string>

Personnage::Personnage() : power(0)
{

}
Personnage::Personnage(int force) : power(force)
{

}
Personnage operator+(Personnage const& first, Personnage const& second)
{
    Personnage resultat;
    resultat = first + second;

    return resultat;

}

Gracias por su ayuda !

-2
Rony Cohen 15 dic. 2016 a las 15:04

2 respuestas

La mejor respuesta

El problema es que su operador se llama a sí mismo sin cesar. Esta declaración:

resultat = first + second;

... invoca a su operador, que luego ejecuta esa declaración de nuevo, etc., etc. Eventualmente obtiene un desbordamiento de pila.

Tu operator+ necesita decidir qué significa semánticamente sumar dos Personnage. Por ejemplo

Personnage operator+(Personnage const& first, Personnage const& second)
{
    int total_power = first.power + second.power;
    return Personnage(total_power);
}

Para acceder a los miembros privados, normalmente puede declarar los operadores sobrecargados como friend en su clase.

class Personnage
{
public:
    Personnage();
    Personnage(int force);

    friend Personnage operator+(Personnage const& first, Personnage const& second);

private:
    int power;
};
3
T.J. Crowder 15 dic. 2016 a las 12:24

Cámbielo a

friend Personnage operator+(Personnage const& first, Personnage const& second)
{
    Personnage resultat;
    resultat.power = first.power + second.power;

    return resultat;

}

O

friend Personnage operator+(Personnage const& first, Personnage const& second)
{
    Personnage resultat(first.power + second.power);
    return resultat;
}

O

friend Personnage operator+(Personnage const& first, Personnage const& second)
{
    return (Personnage resultat(first.power + second.power));
}

También declare como friend en el archivo .h.

Todos son iguales, solo diferentes llamadas a diferentes tipos de constructor.

0
instance 15 dic. 2016 a las 12:38