Cześć! Próbuje zaimplementować filemanager do mojego projektu.
void FileManager::LoadFromFile(const std::string &filePath, std::vector<float> &data)
{
std::ifstream file(filePath.c_str());
data.clear();
if (file.is_open())
{
while (file.eof())
{
std::string line;
std::getline(file, line);
std::vector<float> tempData;
std::stringstream str(line);
while (str)
{
std::getline(str, line, ' ');
tempData.push_back(atof(line.c_str()));
}
if (tempData.size() > 0)
{
data = tempData;
}
}
}
file.clear();
file.close();
}
Chce wgrać dane z pliku do drugiego argumentu std::vector<float> &data;
w klasie w której potrzebuje filemanagera mam prywatny wektor, ten do którego akurat potrzebuje wpisać dane i próbuje te dane wpisać w metodzie draw
Class::Class()
{
fileManager.LoadFromFile("Files/testowy.txt", dane);
}
void Class::Draw()
{
for(int i = 0; i < dane.size(); i++)
{
std::cout<<dane[i]<<std::endl;
}
}
Moim zdaniem powinno działać patrząc na to, że do mapy mam w podobnym typie file manager
void File::LoadFromFile(std::string fileName, std::vector<std::vector<std::string>>& map)
{
fileName = "Files/Config/" + fileName + ".cfg";
std::ifstream openFile(fileName);
map.clear();
if (openFile.is_open())
{
while (!openFile.eof())
{
std::string line;
std::getline(openFile, line);
std::vector<std::string> tempVector;
if (line.find("[map]") != std::string::npos)
{
state = MAP;
tempVector.clear();
continue;
}
std::stringstream str(line);
while (str)
{
std::getline(str, line, ' ');
if (line != "")
{
if (state == MAP)
{
tempVector.push_back(line);
}
}
}
if (state == MAP)
{
map.push_back(tempVector);
}
}
}
openFile.clear();
openFile.close();
}
I nie ma najmniejszego problemu z takim odczytem danych, za to w tym powyżej albo sie wysypuje program albo nic nie jest wypisywane na ekranie. Rozwiązaniem mogłoby być ustawienie zamist voida std::vector<zmienna> jako metoda i zwrócenie wektora z danymi ale jestem ciekawe dlaczego pierwszy sposób nie działa kiedy ten z mapą działa bardzo dobrze.