0

単純なファイルシステムをエミュレートするプログラムがあり、ディレクトリの構造を出力したいので、<<演算子をオーバーロードし、再帰で構造を通過する別の関数を呼び出しました。動作しますが、出力の一部の行の前に奇妙な 16 進数値がいくつかあります。で操作する方法に何か問題があり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 );
}
4

1 に答える 1

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);
}
于 2011-04-11T14:29:15.593 に答える