Перегрузка <<, возвращение ostream выдает ошибку.C ++ - PullRequest
0 голосов
/ 15 февраля 2011

У меня проблема с перегрузкой оператора <<.Все печатается и входит нормально, но когда я пытаюсь вернуть ostream, я получаю эту ошибку: </p>

Выражение: _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)

Я также уже перегружен другой <<оператор в этом проекте, который вернул ostream просто отлично.Этот оператор не используется в следующем коде.Вот код: </p>

#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
}

Этот бит кода в другом заголовке прекрасно работает:

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

Все возвращается на экран до возврата.И эти две функции выглядят одинаково для меня, может кто-то другой опыт с C ++ скажет мне иначе?

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

В показанном коде нет ничего, что могло бы вызвать описанную вами проблему. Ошибка «_BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)» является признаком того, что куча была повреждена в более ранней точке, она обнаруживается в вашем операторе возврата, но никак не связана с кодом вашего оператора << </p>

0 голосов
/ 15 февраля 2011

Вы откопали свою кучу.Это может иметь или не иметь никакого отношения к коду, запущенному в данный момент.Не вижу ничего очевидного в том, что вы решили показать нам, что могло бы вызвать это, хотя я бы начал с любого использования необработанных указателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...