【发布时间】:2018-03-31 15:09:30
【问题描述】:
我搜索了高低,但没有找到答案,所以如果这是重复的,请原谅。
我有一些非常古老的 C++ 代码,我正试图将它们轻松转换到这个千年。代码仍然在 Visual Studio 6 中编译,需要继续这样做,但我也试图让它在 Visual Studio 2017 中工作。我以前做过,但是对头文件等进行了很多更改,这次我是尝试更慎重的方法。
代码已经混合使用了 stl 和非 stl、新旧 io 标头等,所以等待爆炸的是一团糟。
作为一个简单的开始,我只是将 iostream.h 替换为 iostream 以查看会发生什么。我在代码中有 ::ostream 的地方遇到了一些编译器错误,因此将其更改为 std::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 类也覆盖了
inline std::ostream& operator<<(std::ostream& os, const PrinterOption& po)
{
os << "(" << po.Installed() << ", " << po.Enabled() << ")";
return os;
}
【问题讨论】:
-
PrinterOption或PrinterInfo是否在单独的命名空间中? -
是的,这段代码大部分是在 90 年代编写的,所以在一般的命名空间中,没有指定任何内容。
-
那么,这段代码有什么问题呢?你期望什么结果,你观察到什么,两者有什么不同?您是否收到编译器错误、意外输出或其他问题?
-
嗯,在我看来,函数中的
-
显示错误消息的完整文本,以及
PrinterInfo::Duplex()的声明和operator<<的声明,它们应该能够打印返回的任何内容。