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