我的錯誤是我想將directory讀入字符串向量。使用成員函數getFileList。在主要向量中迭代它是空的。我只填寫一個字符串(緩衝區)來檢查向量,並且沒有列出任何文件。只有以下輸出:爲什麼我的字符串向量爲空
Singleton cstr
//verify success in opening dir
opened? [0x1d92630 ]
[ buffer ]
itVect[ buffer ]
爲什麼?
#include <iostream>
#include <string>
#include <tuple>
#include <vector>
#include <dirent.h>
#include "gtest/gtest.h"
class Singleton
{
public:
std::vector<std::string> singletonVect;
Singleton();
void buildFileList(std::vector<std::string> filesVect);
std::vector<std::string> getFileList(void);
static Singleton& getInstance();
};
std::vector<std::string> strings = {"lkhdf","lfdjasdlk"};
Singleton& singleObj(Singleton::getInstance());
std::vector<std::string> openDirectory(std::string path) //opening any folder and saving all file-names in a vector<string>
{
DIR* dir;
dirent* pdir;
std::vector<std::string> files;
dir = opendir(path.c_str());
std::cout << "opened? [" << dir << " ]\n";
while (pdir = readdir(dir)) {
files.push_back(pdir->d_name);
}
return files;
}
void Singleton::buildFileList(std::vector<std::string> filesVect)
{
std::vector<std::string> f;
std::string buffer = "";
f = openDirectory("myFiles"); // pass which dir to open
for (auto i = f.begin(); i != f.end(); ++i) {
if ((*i).find(".exe") != std::string::npos) {
buffer = "myFiles/" + (*i);
filesVect.push_back(buffer);
}
}
}
std::vector<std::string> Singleton::getFileList(void)
{
return singletonVect;
}
Singleton::Singleton()
{
std::cout << "Singleton cstr\n";
buildFileList(singletonVect);
}
Singleton& Singleton::getInstance()
{
static Singleton singleObj;
return singleObj;
}
int main(int argc, char **argv) {
singleObj.singletonVect = singleObj.getFileList();
singleObj.singletonVect.push_back("buffer");
std::cout <<"[ "<< (*singleObj.singletonVect.begin()) << " ]\n";
for (auto itVect = singleObj.singletonVect.begin(); itVect != singleObj.singletonVect.end(); itVect++) {
std::cout << "itVect[ " << (*itVect) << " ]\n";
}
}
歡迎來到Stack Overflow!這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver