2011-04-11 2 views
0

간단한 파일 시스템을 에뮬레이션해야하는 프로그램이있어서 디렉토리의 구조를 인쇄하므로 << 연산자가 오버플로되고 심바 스 내 구조를 통과하는 다른 함수가 호출되었습니다. 그것은 작동하지만, 일부 줄의 앞에 이상한 16 진수 값이 있습니다. ostream을 조작하는 방식에 문제가 있습니까? (클래스 정의는 포함하지 않았지만 문제는 안됨)이상한 문자가 C++에서 ostream에 나타납니다

감사합니다!

std::ostream& printTree(std::ostream& os, const CFileSystem::TDir* x, int nmbTabs) 
{ 
    int k; 
    const CFileSystem::TDir * nxt = x; 
    //cout << pocetTabu<<endl; 
    while(nxt){ 
     os<<"--"; 
     for(k=0;k<nmbTabs;k++){ 
      os << '\t' ; 
     } 
     os<<"--"; 
     os << nxt->m_Name << endl; 
     if(nxt->m_Sub){ 
      os << printTree(os,nxt->m_Sub,nmbTabs+1); 
     } 
     nxt=nxt->m_Next; 
    } 
    return os; 
} 
std::ostream& operator <<(std::ostream& os, const CFileSystem& x) 
{ 
    os << "/" << endl; 
    os << printTree(os, x.m_Root,1); 
    return (os); 
} 

답변

5
os << printTree(os, x.m_Root,1); 

이 무엇입니까? printTreestd::ostream &을 반환하고 출력하려고합니다 (ostream)?

이되어야한다 :

std::ostream& operator<<(std::ostream & os, const CFileSystem & x) 
{ 
    os << "/" << std::endl; 
    return printTree(os, x.m_Root,1); 
} 
+1

+1 좋은 캐치 :

의미
printTree(os, x.m_Root,1); 

, 당신의 operator<<가로 구현되어야한다. ostream 객체 자체 출력하기. –

+1

오, 내 .. 그래서 16 진수 값은 실제로 메모리에있는 ostream의 주소였습니다. 흥미 롭습니다. 정말 고마워! – Randalfien

관련 문제