首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用从函数返回的另一个向量初始化向量

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

Stack Overflow用户
提问于 2021-11-16 23:26:12
回答 1查看 29关注 0票数 0

我尝试创建一个名为mems的向量,它是使用我的myMembers()函数返回的向量声明的。出于某些原因,当我使用这行代码时:

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

代码语言:javascript
复制
terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_M_construct null not valid

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

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

代码语言:javascript
复制
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函数的代码:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 11:46:03

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

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

代码语言:javascript
复制
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()函数返回一个非空字符串,并允许程序按其应有的方式运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69997248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档