2017-02-01 1 views
0

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, 
+1

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. –

+0

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

+2

Avez-vous vérifié que le programme pouvait toujours trouver le fichier texte? Cela importe si vous allez recevoir de l'aide – smac89

Répondre

1

Comme je l'ai mentionné dans les commentaires, le problème le plus probable est que lorsque vous avez créé une version release pour le projet, le fichier texte que le programme dépend n'a pas été inclus dans le dossier correspondant. Pour résoudre ce problème, vous devez inclure ce fichier dans ce dossier ou trouver un moyen d'indiquer à VS que le programme dépend de ce fichier texte. De cette façon, il est automatiquement copié dans le dossier des versions. Je n'utilise pas VS, donc je ne sais pas comment cette dernière partie est possible, mais j'espère que vous avez l'idée.

-1

Il y a deux possibilités:

  1. Comme vous l'avez mentionné que vous êtes en mesure d'obtenir la valeur correcte pendant le débogage En mode debug, il est possible que vous soyez capable de lire correctement à partir du fichier .txt et d'obtenir des valeurs correctes dans votre vecteur, mais comme vous déboguez en mode release, vous ne pouvez pas voir la valeur correcte e liste de surveillance, car vous pouvez trouver la liste de surveillance contenant la valeur de la poubelle en mode de libération, même si votre vecteur obtient la valeur correcte.

  2. Vous n'obtenez pas de fichier .txt, mais dans ce cas, vous ne devriez pas avoir de vélue même dans la version de débogage.