Моя проблема может быть мелочной, но, как новичок, я хочу узнать подробности и, следовательно, буду благодарен за каждого, кто указывает мои ошибки.Невозможно скомпилировать функцию C++
В моем файле заголовка, я определил функцию как этот
void GetFileNames(const fs::path&, const string&, vector<fs::path>&, const bool);
Тогда определение функции выглядит следующим образом в GetFileNames.cpp:
void GetFileNames(const fs::path& root, const string& ext, vector<fs::path>& names, const bool recursiveflag)
{
if(!fs::exists(root) || !fs::is_directory(root))
{
cout<<"The root path either does not exist, or is not a valid folder.\n"<<endl;
return;
}
if (recursiveflag)
{
fs::recursive_directory_iterator it(root);
fs::recursive_directory_iterator endit;
}
else
{
fs::directory_iterator it(root);
fs::directory_iterator endit;
}
while(it != endit)
{
if(fs::is_regular_file(*it) && it->path().extension() == ext)
names.push_back(it->path().filename());
++it;
}
}
Когда я затем попытаться скомпилировать тест программы .cpp, где функция была вызвана следующим образом:
int main(int argc, char** argv)
{
vector<fs::path> names;
fs::path root(argv[1]);
string ext(argv[2]);
GetFileNames(root,ext,names,true);
for(auto i = names.begin(); i!= names.end(); ++i)
cout<< (*i).string()<<endl;
return 0;
}
I recei произошла ошибка:
Scanning dependencies of target Test
[ 33%] Building CXX object src/CMakeFiles/Test.dir/test.cpp.o
[ 66%] Building CXX object src/CMakeFiles/Test.dir/GetFileNames.cpp.o
/Users/ujjwalujjwal/prog/src/GetFileNames.cpp:22:8: error: use of undeclared identifier 'it'
while(it != endit)
^
/Users/ujjwalujjwal/prog/src/GetFileNames.cpp:22:14: error: use of undeclared identifier 'endit'
while(it != endit)
^
/Users/ujjwalujjwal/prog/src/GetFileNames.cpp:24:27: error: use of undeclared identifier 'it'
if(fs::is_regular_file(*it) && it->path().extension() == ext)
^
/Users/ujjwalujjwal/prog/src/GetFileNames.cpp:24:34: error: use of undeclared identifier 'it'
if(fs::is_regular_file(*it) && it->path().extension() == ext)
^
/Users/ujjwalujjwal/prog/src/GetFileNames.cpp:25:20: error: use of undeclared identifier 'it'
names.push_back(it->path().filename());
^
/Users/ujjwalujjwal/prog/src/GetFileNames.cpp:27:5: error: use of undeclared identifier 'it'
++it;
^
6 errors generated.
make[2]: *** [src/CMakeFiles/Test.dir/GetFileNames.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/Test.dir/all] Error 2
make: *** [all] Error 2
Я, похоже, не понимаю, где именно я делаю концептуальную ошибку. Это кажется очень тривиальным, но я хотел бы понять, что происходит здесь.
это не имеет никакого отношения к bool. ваши итераторы не входят в область 'while (it! = endit)', потому что вы объявляете их в if, если они меньше. – UmNyobe
Вот идея.Если вы считаете, что ваша проблема вызвана X, проверьте эту гипотезу, удалив X из проблемы и увидев, если она исчезнет. – juanchopanza