나는 높거나 낮게 검색했으나 대답을 찾지 못했습니다. 그러므로 이것이 중복되면 변명하십시오.C++ operator << std :: ostream 대신 call :: ostream
저는이 천년기로 가볍게 변환하려고하는 아주 오래된 C++ 코드가 있습니다. 이 코드는 여전히 Visual Studio 6에서 컴파일되고 계속해야하지만 Visual Studio 2017에서이 코드를 사용하려고합니다. 이전에이 작업을 수행했지만 헤더 파일 등을 많이 변경 했으므로 이번에는 더 많은 측정 방법을 시도합니다.
코드는 이미 stl과 non-stl, old 및 new io 헤더 등을 혼합하여 사용하므로 폭발하기가 기다리고 있습니다.
간단한 시작으로, 나는 무엇이 일어날지를보기 위해 iostream.h를 iostream로 대체했습니다. 코드에 :: 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 클래스뿐만 아니라 < < 운영자에 대한 재정의가 있습니다
inline std::ostream& operator<<(std::ostream& os, const PrinterOption& po)
{
os << "(" << po.Installed() << ", " << po.Enabled() << ")";
return os;
}
별도의 네임 스페이스에'PrinterOption' 또는'PrinterInfo'가 있습니까? – Slava
예,이 코드의 대부분은 90 년대에 작성되었으므로 일반적인 네임 스페이스에서는 아무 것도 지정되지 않았습니다. –
그럼이 코드의 문제점은 무엇입니까? 당신은 어떤 결과를 기대합니까, 당신은 무엇을 관찰하고, 어떻게 다른가? 컴파일러 오류, 예기치 않은 결과, 다른 것을 얻습니까? –