我有一个类A
,其中定义了几种数据类型。在程序中,我定义了A
类型的向量,然后从文本文件中读取到此向量中。
当我调试时,向量"填满"我可以从中读取价值 - 一切都按计划进行。但是,当我构建发布版本并运行.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,
答案 0 :(得分:1)
正如我在评论中提到的,最可能的问题是,当您为项目创建发布版本时,程序所依赖的文本文件未包含在相应的文件夹中。
要修复它,您必须自己在该文件夹中包含此文件,或者找到一种方法向VS指示程序依赖于该文本文件,这样就会自动将其复制到发布文件夹中。我不使用VS,所以我不知道最后一部分是多么可能,但我希望你能得到这个想法。
答案 1 :(得分:-1)
有两种可能性:
正如您所说,在调试模式下调试时,您可以获得正确的值,您可以从.txt文件中正确读取并在向量中获取正确的值,但是当您在发布模式下进行调试时,您无法在监视列表中看到正确的值,因为即使您的矢量获得了正确的值,您也可能会在发布模式中找到包含垃圾值的监视列表。
你没有得到.txt文件,但在这种情况下,你甚至不应该在调试版本中获得反对意见。