std :: vector <class>在调试时填充但不在发布时填充

时间:2017-02-01 19:46:14

标签: c++ visual-studio vector enums stdvector

我有一个类A,其中定义了几种数据类型。在程序中,我定义了A类型的向量,然后从文本文件中读取到此向量中。

当我调试时,向量&#34;填满&#34;我可以从中读取价值 - 一切都按计划进行。但是,当我构建发布版本并运行.exe时,向量为空。程序的其余部分工作正常,它只是没有推动值。

我对C ++很新,所以我假设它与我的构造函数有关,或者我可能如何处理enum?这是我的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;
    }
}

这是Text.txt:

1, String1, Type1,
2, String2, Type1,

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,最可能的问题是,当您为项目创建发布版本时,程序所依赖的文本文件未包含在相应的文件夹中。

要修复它,您必须自己在该文件夹中包含此文件,或者找到一种方法向VS指示程序依赖于该文本文件,这样就会自动将其复制到发布文件夹中。我不使用VS,所以我不知道最后一部分是多么可能,但我希望你能得到这个想法。

答案 1 :(得分:-1)

有两种可能性:

  1. 正如您所说,在调试模式下调试时,您可以获得正确的值,您可以从.txt文件中正确读取并在向量中获取正确的值,但是当您在发布模式下进行调试时,您无法在监视列表中看到正确的值,因为即使您的矢量获得了正确的值,您也可能会在发布模式中找到包含垃圾值的监视列表。

  2. 你没有得到.txt文件,但在这种情况下,你甚至不应该在调试版本中获得反对意见。