用函数返回的另一个向量初始化向量



我正试图创建一个名为mems的向量,该向量是使用myMembers()函数返回的向量声明的。出于某种原因,当我使用这条线时:

vector<string> mems = myMembers();返回错误:

terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_M_construct null not valid

此错误不会在编译时出现,而是在程序到达这行代码时出现。我已经研究了几个小时该怎么解决它,但我真的不确定。

到目前为止,我写的代码如下:

vector<string> Person::myMembers(){
fstream file;
file.open("myFile.txt");
string myLine;
vector<string> mems;

while(getline(myFile, myLine)){
vector<string> myLine = split(myLine, ',');
mems.push_back(myLine.at(0));
for (int i = 5; i < myLine.size(); i++){
mems.push_back(myLine.at(i));
}
}
return mems;
}

上面的函数将获得索引0处的名称,以及从索引5到n的名称列表。然后,它将这些名称放入一个名为mems的向量中,并返回它。

(我应该让你知道,split是我编写的一个函数,它只需用指定的分隔符分隔一行,然后将其放入向量中(。

然后,在代码的后面,我创建了一个新的向量,称为mems,并将其设置为等于myMembers()的输出

vector<string> mems = myMembers()

我知道是上面的代码行导致了错误,但我不知道为什么,也不知道如何修复它

如有任何帮助,我们将不胜感激。

感谢您抽出时间:(

编辑

在提到错误可能是splitString的一部分后,请在下面找到我的splitString函数的代码:

vector<string> split(string myString, char delimiter){
string temp = 0;
vector<string> splitString;
for (int i = 0; i < myString.size(); i++){
if (myString[i] != delimiter){
temp += myString[i];
} else {
splitString.push_back(temp);
}
}
return splitString;
}

我发现了程序的问题。split((函数导致了错误,因为temp被初始化为string temp = 0;,这意味着它试图初始化具有整数值的字符串。

split((函数的正确代码如下:

ector<string> split(string myString, char delimiter){
string temp = "";
vector<string> splitString;
for (int i = 0; i < myString.size(); i++){
string temp = "";
if (myString[i] != delimiter){
temp += myString[i];
} else {
splitString.push_back(temp);
}
}
return splitString;
}

这样一来,split((函数就可以返回一个非空字符串,并允许程序正常运行。

最新更新