我正在製作一個函數,用於引用文件系統上的路徑並遞歸地將文件名添加到矢量。但首先,我必須能夠向矢量添加路徑。C++將解除引用的對象推向向量
這種方法有什麼問題?
namespace filesys = boost::filesystem;
方法:
void recursive_file_list(filesys::path & root_path, vector<filesys::path> & paths) {
paths->push_back(*root_path); // line 14
// TODO: add more logic to actually recurse through file system
// for now just add root_path (even though root_path is path of directory, not file)
}
我叫它像這樣:
int main(int argc, char* argv[]) {
// Use the command line arguments
filesys::path abs_path; // line 23
if (argc > 1)
// Make the system complete this path to absolute path
abs_path = filesys::system_complete(filesys::path(argv[1]));
else {
// If no arguments given
cout << "usage: list_files [path]" << endl;
exit(1);
}
// Is this a valid path?
if (!filesys::exists(abs_path)) {
cout << "The path you have specified does not exist." << endl;
exit(2);
}
// If this is a directory
vector<filesys::path> filepaths();
if (filesys::is_directory(abs_path)) {
cout << "You have specified a directory." << endl;
recursive_file_list(&abs_path, &filepaths);
}
else {
cout << "You have specified a file." << endl;
}
}
錯誤:
list_files.cpp: In function 'void recursive_file_list(boost::filesystem3::path&, std::vector<boost::filesystem3::path, std::allocator<boost::filesystem3::path> >&)':
list_files.cpp:14: error: base operand of '->' has non-pointer type 'std::vector<boost::filesystem3::path, std::allocator<boost::filesystem3::path> >'
list_files.cpp:14: error: no match for 'operator*' in '*root_path'
list_files.cpp: In function 'int main(int, char**)':
list_files.cpp:43: error: invalid initialization of non-const reference of type 'boost::filesystem3::path&' from a temporary of type 'boost::filesystem3::path*'
list_files.cpp:13: error: in passing argument 1 of 'void recursive_file_list(boost::filesystem3::path&, std::vector<boost::filesystem3::path, std::allocator<boost::filesystem3::path> >&)'
我不明白 - 我傳遞通過引用,然後解引用它來添加它......不確定wh在我做錯了。
爲什麼-1?我用C++並不是很好,但我不認爲這意味着我不應該問這個問題。 – lollercoaster