使用从函数返回的另一个向量初始化一个向量
Initialising a vector with anoter vector, returned from a function
我正在尝试创建一个名为 mems
的向量,它是使用 myMembers()
函数中的 returned 向量声明的。出于某种原因,当我使用这条线时:
vector<string> mems = myMembers();
它 return 是一个错误:
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
和 return 的向量中。
(我应该让你知道 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() 函数 return 一个非空字符串,并允许程序 运行 它应该的。
我正在尝试创建一个名为 mems
的向量,它是使用 myMembers()
函数中的 returned 向量声明的。出于某种原因,当我使用这条线时:
vector<string> mems = myMembers();
它 return 是一个错误:
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
和 return 的向量中。
(我应该让你知道 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() 函数 return 一个非空字符串,并允许程序 运行 它应该的。