【问题标题】:Overload <<, returning ostream gives error. C++重载 <<,返回 ostream 会出错。 C++
【发布时间】:2011-02-14 23:38:16
【问题描述】:

我在重载

表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

我还已经在这个项目中重载了另一个

#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++ 经验的人可以告诉我吗?

【问题讨论】:

    标签: c++ operator-overloading bitwise-operators return-type ostream


    【解决方案1】:

    显示的代码中没有任何内容会导致您描述的问题。 “_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)”错误表明堆在较早的时候已损坏,它在您的 return 语句中被检测到,但与您的操作员中的代码无关

    【讨论】:

    • 谢谢,感谢您的回答。有道理,我整天都在做另一个项目,毫无意外,一切都过去了。
    • 附带说明一下,您的 Car 类确实需要一个析构函数、一个复制构造函数和一个 operator=,否则您会遇到内存泄漏和/或有趣的错误,例如通过值传递 Car 对象或以更明显的方式复制它们。
    【解决方案2】:

    你已经把你的堆放满了。它可能与当前运行的代码有任何关系,也可能没有任何关系。尽管我将从使用原始指针开始,但在您决定向我们展示的内容中看不到任何立即明显的东西。

    【讨论】:

      猜你喜欢
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多