gpt4 book ai didi

c++ - vector 消失

转载 作者:行者123 更新时间:2023-11-28 06:28:28 27 4
gpt4 key购买 nike

所以我的 Item::return_all() 有问题,因为我在 main.cpp 中调用它。早些时候我在 read_file()for (auto data : example_item) 中尝试了 return_all 循环打印数据 inside item_ 正确.如果我在 main 中调用它,return_all() 不返回(或至少 main.cpp 不打印它)item_ 中的数据的原因是什么?或者 item_ 中的数据是否由于某种我不知道的原因而消失,因为我的 c++ 知识非常有限。

Items.txt 包含格式为 "1001:0:6" 的行。

main.cpp
#include "item.hh"
#include "functions.hh"

int main() {
Item item;
read_file("items.txt");
std::vector<std::vector<int>> example_item = item.return_all();
for (auto data : example_item){
for (auto data2 : data){
std::cout << data2 << std::endl;
}
}
}
项目.hh
class Item {

public:
Item();
void add_item(std::vector<int> item);
std::vector<std::vector<int>> return_all();
std::vector<int> return_item(const int& name) const;

private:
std::vector<std::vector<int>> item_;
};
项目.cpp
#include "item.hh"
#include "functions.hh"

Item::Item(){}

void Item::add_item(std::vector<int> item){
item_.push_back(item);
}

std::vector<std::vector<int>> Item::return_all(){
return item_;
}

std::vector<int> Item::return_item(const int& name) const {
for (auto item : item_) {
if (item.at(0) == name) {
return item;
}
}
return {};
}
函数.hh
void read_file(const std::string name);
std::vector<std::string> split(const std::string& string, char splitter);
函数.cpp
#include "item.hh"
#include "functions.hh"

void read_file(const std::string name){
Item item;
std::string line;
std::ifstream myfile(name);
if (myfile.is_open())
{
while (getline(myfile, line))
{
std::vector<std::string> field{};
field = split(line, ':');
int name = std::stoi(field.at(0));
int type = std::stoi(field.at(1));
int attr = std::stoi(field.at(2));
std::vector<int> field_i = {name , type, attr};
item.add_item(field_i);
}
}
myfile.close();
}

std::vector<std::string> split(const std::string& string, char splitter) {
std::vector<std::string> fields{};
std::string::size_type start_p{0};
while ( true ) {
std::string::size_type end_p{0};
end_p = string.find(splitter, start_p);
if ( end_p == std::string::npos ) {
break;
}
std::string field{""};
field = string.substr(start_p, end_p - start_p);
fields.push_back(field);
start_p = end_p + 1;
}
fields.push_back(string.substr(start_p));
return fields;
}

最佳答案

改变这个:

Item item;
read_file("items.txt");

到:

Item item = read_file("items.txt");

和相应的read_file定义。按原样,该函数只是将文件读入本地 Item,然后将其销毁。所以你的 item 总是空的,因为没有任何东西向它添加任何东西。

关于c++ - vector 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28110572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com