Rozwiązanie...:

#include <iostream>
#include <sstream>
#include <vector>
#include <dirent.h>
#include <string.h>

typedef std::vector<std::string> fileVect;

fileVect getFiles(std::string directory){
    if(*(directory.end() - 1) != '/'){
        directory += "/";
    }

    DIR *dir = opendir(directory.c_str());
    fileVect tmp;

    if(dir){
        while(dirent *entry = readdir(dir)){
            if(strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..")){
                std::string fileaddr = directory + entry->d_name;
                tmp.push_back(fileaddr);

                if(DIR *dir2 = opendir(fileaddr.c_str())){
                    closedir(dir2);
                    fileVect tmp2 = getFiles(fileaddr);
                    tmp.insert(tmp.end(), tmp2.begin(), tmp2.end());
                }       
            }
        }

        closedir(dir);
    }

    return tmp;
}

int main(int argc, char* argv[]){   
    fileVect files = getFiles("./");
    for(fileVect::iterator it = files.begin(); it != files.end(); ++it){
        std::cout << *it << std::endl;
    }
}