2011-04-11 3 views
0

У меня есть программа, которая должна эмулировать простую файловую систему, я хочу напечатать структуру каталогов, поэтому я перегрузил оператор << и вызвал другую функцию, которая проходит через мою структуру в рекурсии. Он работает, НО есть некоторые странные шестнадцатеричные значения перед некоторыми линиями на выходе. Что-то не так с тем, как я манипулирую с ostream? (Я не включил определение класса, но это не должно иметь значения)Странные символы появляются в ostream в C++

Спасибо всем, за любые ответы!

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); 

Что это? printTree возвращает std::ostream &, и вы пытаетесь вывести это (ostream)?

Это должно быть так:

printTree(os, x.m_Root,1); 

Это означает, что ваш operator<< должны быть реализованы как:

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

+1 Хороший улов. Вывод самого объекта Ostream. –

+1

О, мой ... Так что шестнадцатеричные значения были фактически адресами ostream в памяти, интересными. Спасибо! – Randalfien

Смежные вопросы