Any ideas on how I should make this a multi-file project (I am using Code::Blocks and the GCC compiler):
#include <iostream> #include <windows.h> #include <cstring> #include <new> #include <vector> #include <stack> using namespace std; struct node { string value; vector <node *> subnodes; }; //end node class directorytree { private: stack <HANDLE> hstack; stack <WIN32_FIND_DATA> fdstack; HANDLE h; WIN32_FIND_DATA fd; node thenode; string directory; void createtree(node*, string); void preorder(node *); void deletetree(node *, node*); public: directorytree(node, string); void classmain(); }; //end directorytree directorytree::directorytree(node n, string d) { thenode = n; directory = d; } //end constructor void directorytree::createtree(node * a, string dir) { if (a != 0) { a->value = dir; h = FindFirstFile((a->value + "/*.").c_str(), &fd); while ((((string)fd.cFileName == ".") || ((string)fd.cFileName == "..")) && (FindNextFile(h,&fd))) { } //end while if (((string)fd.cFileName != ".") && ((string)fd.cFileName != "..")) { if (fd.dwFileAttributes != 16) { a->subnodes.push_back(0); createtree(a->subnodes[0], dir); } //end if else { hstack.push(h); fdstack.push(fd); do { dir = a->value + '/' + (string)((fdstack.top()).cFileName); a->subnodes.push_back(new(nothrow)node); createtree(a->subnodes.back(), dir); } //end do while (FindNextFile(hstack.top(), &(fdstack.top()))); hstack.pop(); fdstack.pop(); } //end else } //end if else { a->subnodes.push_back(0); createtree(a->subnodes[0], dir); } //end else } //end if } //end createtree void directorytree::preorder(node * a) { if (a != 0) { cout << a->value << endl; if (a->subnodes.size() == 1) { preorder(a->subnodes[0]); } //end if else { for (int pos = 0; pos < (int)(a->subnodes.size()); pos++) { preorder(a->subnodes[pos]); } //end for } //end else } //end if } //end preorder void directorytree::deletetree(node * a, node * parent) { if (a != 0) { for(unsigned pos = 0; pos < a->subnodes.size(); ++pos) { deletetree(a->subnodes[pos], parent); } //end for if (a != parent) { cout << "The node for "<<a->value << " got deleted."<<endl; delete a; } //end if } //end if } //end deletetree void directorytree::classmain() { createtree(&thenode, directory); preorder(&thenode); deletetree(&thenode, &thenode); } //end classmain int main() { node tree; directorytree dirtree(tree, "C:/Users/owner/Desktop"); dirtree.classmain(); return 0; } //end main