因为我在Item::return_all()
中称之为main.cpp
,所以我遇到了问题。之前我在return_all
内read_file()
尝试for (auto data : example_item)
正确地在item_
内循环打印数据。如果我在main中调用它,return_all()
在item_
内没有返回(或至少main.cpp不打印它)数据的原因是什么?或者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;
}
}
}
item.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_;
};
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 {};
}
functions.hh
void read_file(const std::string name);
std::vector<std::string> split(const std::string& string, char splitter);
functions.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;
}
答案 0 :(得分:1)
改变这个:
Item item;
read_file("items.txt");
为:
Item item = read_file("items.txt");
相应地定义read_file
。原样,该函数只是将文件读入本地Item
,然后销毁。所以你的item
总是空的,因为没有任何内容可以添加任何内容。
答案 1 :(得分:0)
其中一个Item
被称为&#34; item&#34;这里:
int main() {
Item item;
read_file("items.txt");
又来了另一个:
void read_file(const std::string name){
Item item;
这两个是不同的对象,您只需修改read_file
中的对象。
解决此问题的最简单方法是从read_file
返回一个对象:
Item read_file(const std::string name){
Item item;
// The rest of the code
return item;
}
int main() {
Item item = read_file("items.txt");
// ...