C ++运算符<<调用:: ostream而不是std :: ostream

时间:2017-10-19 14:25:22

标签: c++ io stl

我搜索过高低,但没有找到答案,所以请原谅这是否重复。

我有一些非常古老的C ++代码,我试图轻易地转换成这个千年。代码仍然在Visual Studio 6中编译并且需要继续这样做,但我也试图让它在Visual Studio 2017中运行。我之前已经完成了这个,但是对头文件等进行了很多更改,这次我是尝试更加谨慎的方法。

代码已经使用了stl和非stl,旧的和新的io标题等混合,所以它等待爆炸一团糟。

作为一个简单的开始,我只是用iostream替换了iostream.h,看看会发生什么。我得到了一些编译器错误,其中代码中包含:: ostream,因此将其更改为std :: ostream修复了该问题。接下来我遇到了一个重载<<的问题运算符,其中的所有位都使用std :: iostream,但似乎<<命令正在尝试使用ostream(或basic_ostream)。

我错过了什么?我假设我必须更改一些导入旧io类的头文件。

inline std::ostream& operator<<(std::ostream& os, const PrinterInfo& pi)
{
    os << pi.Idx() << ": " << pi.Name() << ", "
            << PrinterInfo::MapPrinterType(pi.GetPrinterType()) << ", "
            << PrinterInfo::MapPaperType(pi.GetPaperType()) << ", "
            << PrinterInfo::MapPrintFormat(pi.GetPrintFormat()) << ", "
            << PrinterInfo::MapRasType(pi.GetRasType()) << ", "
            << PrinterInfo::MapNPS(pi.NPS()) << ", "
            << "dpx = " << pi.Duplex() << ", "
            << "tray = " << pi.Tray2() << ", "
            << "port = " << pi.PortNo();

    return os;
}

PrinterInfo类具有&lt;&lt;&lt;&lt;&lt;&lt;运营商:

    inline std::ostream& operator<<(std::ostream& os, const PrinterOption& po)
{
    os << "(" << po.Installed() << ", " << po.Enabled() << ")";
    return os;
}

1 个答案:

答案 0 :(得分:1)

我不知道是否是这种情况但是如果你实现了一个函数的主体INSIDE类头文件删除内联关键字,我有一个类似的问题,我浪费了2-3整天和大量的重新编码实现此...