私はWherが私の間違いですdirectoryを文字列ベクトルに読みたいです。メンバー関数getFileListを使用します。メインでそれを反復すると、文字列ベクトルは空です。私はベクトルをチェックするために1つの文字列(バッファ)だけを記入し、ファイルはリストされていません。次の出力のみが表示されます。なぜ私の文字列ベクトルは空です
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";
}
}
ようこそスタックオーバーフロー!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。詳しい読書:** [小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver