C++ PROBLEME....

Grafitos -  
 LolO -
Bonjour
Petit probleme mémoire... (visual c++)

#include <stdafx.h>
#include <iostream.h>

class pile {
private:
int * tableau;
public:
pile(int i);

~pile();
pile operator+(const pile& xpile);
};
pile::pile(int i)
{
tableau=new int[i];
}
pile::~pile()
{
delete []tableau;
}
pile pile::operator+(const pile& xpile)
{
pile mapile(10);
return mapile;

}

void main()
{
pile ispile(10);
pile result(10);
pile mapile(10);
result=mapile+ispile;
}

Pourquoi ce programme ne marche pas?? Pourtant le destructeur est correct.Lorsque l'on enleve le delete du destructeur, cela marche, et si on enleve les operateur surchargé, et que l'on laisse le delete cela marche aussi...
Pouvez vous m'eclairez.
Merci

5 réponses

  1. LolO
     
    Bonjour,
    commence par regarder ce que retourne ton opérateur : un objet sur le tas.
    Quand tu sors de l'opérateur il est détruit.
    Préconise un pointeur.
    0
  2. Grafitos
     
    désolé je comprend pas trop: "préconise un pointeur" cad?
    merci a+
    0
  3. LolO
     
    Excuse j'avais pas le temps de détailler.
    Ecris ton opérateur de cette façon :

    pile *pile::operator+(const pile& xpile)
    {
    pile *mapile = new pile(10);
    return mapile;
    }

    --
    LolO
    0
  4. Grafitos
     
    binary '=' : no operator defined which takes a right-hand operand of type 'class pile *' (or there is no acceptable conversion)
    C'est l'erreur qu'il me marque pour "result=mapile+ispile"
    :/
    a+ (merci!)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. LolO
     
    oui cest normal il faut que tu types ta variable "result" comme un pointeur
    déclare la comme ceci :
    int main(...) {
    pile *result;
    ....
    result = mypile + ispile;
    ....
    }

    --
    LolO
    0