Question

J'ai un problème avec la surcharge de l'opérateur <<. Tout s'imprime et entre bien, mais quand j'essaie de retourner l'osstre, j'obtiens cette erreur:

Expression: _block_type_is_valid (Phead-> nBlockuse)

J'ai également déjà surchargé un autre opérateur << dans ce projet qui a très bien renvoyé un OSIRAM. Cet opérateur n'est pas utilisé dans le code suivant. Voici le code:

#include "header1.h"
#include <iostream>
using namespace std;

class Car
{
public:
    friend class Extras;
    friend int main();
    friend ostream& operator<< (ostream& os, const Car& in);
    Car();
    Car(string in_name, int in_year, string in_color, float in_cost);
private:
    string name, color;
    int year, extr_num;
    float cost;
    Extras  *extr;
};
int main()
{
    Car c1;
    cout << c1;
    return 0;
}

//Default Constructor
Car::Car()
{
    name = "TEMP";
    color = "BLUE";
    year = 0;
    cost = 0;
    extr = new Extras[3];
    extr_num = 0;
}

//Constructor
Car::Car(string in_name, int in_year, string in_color, float in_cost)
{
    name = in_name;
    color = in_color;
    year = in_year;
    cost = in_cost;
    extr = new Extras[3];
    extr_num = 0;
}

//Overloaded << operator for Car class

//This function is the one that fails.
ostream& operator<< (ostream& os, const Car& in)
{
    os.precision(2);
    os << in.name << ", " << in.year << ", " 
        << in.color << ", $"<< in.cost << ", ";
    os << "extras include: ";
    os << endl;
    return os;  //Line of code in question
}

Ce peu de code dans l'autre en-tête fonctionne parfaitement bien:

ostream& operator<< (ostream& os, Extras const &in)
{
    os << in.ex_list;
    return os;
}

Tout s'imprime bien à l'écran avant le retour. Et ces deux fonctions me semblent la même chose, quelqu'un de plus d'expérience avec C ++ me dit-il le contraire?

Était-ce utile?

La solution

Il n'y a rien dans le code montré qui entraînera le problème que vous décrivez. L'erreur "_block_type_is_valid (phead-> nblockuse)" est une indication que le tas a été corrompu à un moment précédent, il est détecté dans votre déclaration de retour mais n'est pas autrement liée au code de votre opérateur <

Autres conseils

Vous avez arrosé votre tas. Cela peut avoir ou non rien à voir avec le code en cours d'exécution. Ne voyez rien immédiatement apparent dans ce que vous avez décidé de nous montrer qui le provoquerait, bien que je commencerai par l'utilisation de pointeurs bruts.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top