J'ai une classe A
qui a plusieurs types de données définis en son sein. Dans le programme, je définis un vecteur de type A
et ensuite lu à partir d'un fichier texte dans ce vecteur.std :: vector <class> remplit au débogage mais pas au lancement
Lorsque je débogue, le vecteur "se remplit" et je peux en lire les valeurs - tout fonctionne comme prévu. Toutefois, lorsque je compile la version et lance le fichier .exe, le vecteur est vide. Le reste du programme fonctionne bien, il ne pousse pas les valeurs. Je suis assez nouveau à C++, donc je suppose que c'est quelque chose à voir avec ma fonction constructeur, ou peut-être comment je gère le enum
? Voici mon MCVE:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
enum class Type
{
Type1
};
Type convertStringToType(std::string input)
{
return Type::Type1;
}
class A
{
public:
int num;
std::string str;
Type typ;
A(int refNumber, std::string name, Type type)
{
num = refNumber;
str = name;
typ = type;
}
};
std::vector<A> readFileIntoVector(std::string filename)
{
std::ifstream readFile(filename);
std::vector<A> tempVector;
std::string tempNum = "";
std::string tempStr = "";
std::string tempTyp = "";
std::getline(readFile, tempNum, ',');
std::getline(readFile, tempStr, ',');
std::getline(readFile, tempTyp, ',');
while (readFile)
{
tempVector.push_back(A(std::stoi(tempNum), tempStr, convertStringToType(tempTyp)));
std::getline(readFile, tempNum, ',');
std::getline(readFile, tempStr, ',');
std::getline(readFile, tempTyp, ',');
}
return tempVector;
}
int main()
{
std::vector<A> exampleVector = readFileIntoVector("Text.txt");
if (exampleVector.empty() == true)
{
std::cout << "Vector is empty.";
system("PAUSE");
}
else
{
int a = 1;
do
{
std::cin >> a;
if (a == 0 || a == 1)
{
std::cout << exampleVector.at(a).num << "\n";
std::cout << exampleVector.at(a).str << "\n";
}
} while (a == 0 || a == 1);
return 0;
}
}
Ceci est Text.txt:
1, String1, Type1,
2, String2, Type1,
Qu'est-ce que c'est «Text.txt»? Êtes-vous sûr que vos versions de débogage et de version ouvrent le même fichier? Si vos versions debug/release sont générées dans des répertoires différents (par exemple, Visual Studio), auquel cas "Text.txt" peut seulement être présent dans le répertoire de sortie du débogage. –
Je m'excuse si c'est trop long ... Je ne sais pas si c'est l'int, la chaîne ou l'enum que j'ai besoin de changer. Je regarde ça depuis quelques jours et je me bats pour être honnête. – Jonathan
Avez-vous vérifié que le programme pouvait toujours trouver le fichier texte? Cela importe si vous allez recevoir de l'aide – smac89